使用c模拟mysql压缩函数#
问题描述:
我想插入一些字节数据到mysql blob列。 数据很大,所以我想以压缩的方式存储它。使用c模拟mysql压缩函数#
我正在使用实体框架3.5SP1插入数据到MySQL数据库使用最新的MySQL .net连接器。有没有办法使用entitiy框架插入一个blob到mysql数据库(如insert into testtable (blobcolumn) values (compress('aaa'))
)或模仿mysql的compress
函数在c#中,然后将结果插入数据库?
感谢
答
请使用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();
}
}
}
}
这不只是流量,而不是存储? – 2012-02-22 21:36:10
这是关于交通。一些存储引擎也提供这种功能(ROW_FORMAT表选项),例如INNODB压缩 - http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression.html – Devart 2012-02-23 07:41:44
我不想压缩整个表,而是写入一列mysql压缩格式。实际上,这意味着我想要使用.net插入数据集,并使用mysql的解压缩函数选择日期集。 – 2012-02-23 13:57:21