我想插入一些字節數據到mysql blob列。 數據很大,所以我想以壓縮的方式存儲它。使用c模擬mysql壓縮函數#
我正在使用實體框架3.5SP1插入數據到MySQL數據庫使用最新的MySQL .net連接器。有沒有辦法使用entitiy框架插入一個blob到mysql數據庫(如insert into testtable (blobcolumn) values (compress('aaa'))
)或模仿mysql的compress
函數在c#中,然後將結果插入數據庫?
感謝
我想插入一些字節數據到mysql blob列。 數據很大,所以我想以壓縮的方式存儲它。使用c模擬mysql壓縮函數#
我正在使用實體框架3.5SP1插入數據到MySQL數據庫使用最新的MySQL .net連接器。有沒有辦法使用entitiy框架插入一個blob到mysql數據庫(如insert into testtable (blobcolumn) values (compress('aaa'))
)或模仿mysql的compress
函數在c#中,然後將結果插入數據庫?
感謝
指定連接字符串中'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();
}
}
}
}
這不只是流量,而不是存儲? – 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