2012-02-22 88 views
0

我想插入一些字节数据到mysql blob列。 数据很大,所以我想以压缩的方式存储它。使用c模拟mysql压缩函数#

我正在使用实体框架3.5SP1插入数据到MySQL数据库使用最新的MySQL .net连接器。有没有办法使用entitiy框架插入一个blob到mysql数据库(如insert into testtable (blobcolumn) values (compress('aaa')))或模仿mysql的compress函数在c#中,然后将结果插入数据库?

感谢

回答

0

指定连接字符串中'UseCompression'选项来启用数据包的压缩。

+0

这不只是流量,而不是存储? – 2012-02-22 21:36:10

+0

这是关于交通。一些存储引擎也提供这种功能(ROW_FORMAT表选项),例如INNODB压缩 - http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression.html – Devart 2012-02-23 07:41:44

+0

我不想压缩整个表,而是写入一列mysql压缩格式。实际上,这意味着我想要使用.net插入数据集,并使用mysql的解压缩函数选择日期集。 – 2012-02-23 13:57:21

1

请使用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(); } } } }