2012-02-22 43 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(); } } } }