使用c#模拟mysql压缩函数
本文关键字:压缩函数 mysql 模拟 使用 | 更新日期: 2023-09-27 18:25:30
我想在mysql blob列中插入一些字节数据。数据很大,所以我想以压缩的方式存储它。
我使用EntityFramework3.5SP1,使用最新的mysql.net连接器将数据插入mysql数据库。有没有一种方法可以使用entitiy框架将blob插入mysql数据库(如insert into testtable (blobcolumn) values (compress('aaa'))
),或者在c#中模拟mysql的compress
函数,然后将结果插入数据库?
感谢
在连接字符串中指定"UseCompression"选项以启用数据包压缩。
请在下面找到我使用Ionic zip的实现。希望能有所帮助!
using System;
using System.IO;
using Ionic.Zlib;
using System.Text;
namespace Qobuz
{
public static class MySqlCompressHelper
{
public static byte[] MySqlCompress(this string str, CompressionLevel level = CompressionLevel.BestCompression)
{
return UTF8Encoding.UTF8.GetBytes(str).MySqlCompress(level);
}
public static byte[] MySqlCompress(this byte[] buffer, CompressionLevel level = CompressionLevel.BestCompression)
{
using (var output = new MemoryStream())
{
output.Write(BitConverter.GetBytes((int)buffer.Length), 0, 4);
using (var compressor = new ZlibStream(output, CompressionMode.Compress, level))
{
compressor.Write(buffer, 0, buffer.Length);
}
return output.ToArray();
}
}
public static string MySqlUncompressString(this byte[] buffer)
{
return UTF8Encoding.UTF8.GetString(buffer.MySqlUncompressBuffer());
}
public static byte[] MySqlUncompressBuffer(this byte[] buffer)
{
using (var output = new MemoryStream())
{
using (var decompressor = new ZlibStream(output, CompressionMode.Decompress))
{
decompressor.Write(buffer, 4, buffer.Length - 4);
}
return output.ToArray();
}
}
}
}