2012-02-22 6 views
0

いくつかのバイトデータをmysql blobカラムに挿入したいと思います。 データが大きいので、圧縮された形で保存したい。cを使ってmysql compress関数をシミュレートする#

私は最新のmysql .netコネクタを使用して、Entity Framework 3.5SP1を使用してmysqlデータベースにデータを挿入しています。 mysqlデータベースにブロブを挿入するためにentitiyフレームワークを使用する方法(insert into testtable (blobcolumn) values (compress('aaa'))など)、またはmysqlのcompress関数をエミュレートしてデータベースに挿入する方法がありますか?

おかげ

答えて

0

は、パケットの圧縮を可能にするために、接続文字列で'UseCompression'オプションを指定してください。

+0

トラフィックだけではなく、ストレージについては、このありませんか? –

+0

トラフィックについてです。一部のストレージエンジンは、この機能も提供しています(ROW_FORMATテーブルオプション)。 INNODB圧縮 - http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression.html – Devart

+0

私はテーブル全体を圧縮するのではなく、mysql圧縮フォーマットで1つのカラムを書きます。具体的には、これは、.netを使ってデータセットを挿入し、mysqlのuncompress関数を使ってdatesetを選択することを意味します。 –

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

関連する問題