2012-02-22 2 views
0

Je voudrais insérer des données d'octets dans une colonne mysql blob. Les données sont volumineuses, je veux donc les stocker de manière compressée. J'utilise Entity Framework 3.5SP1 pour insérer les données dans la base de données mysql en utilisant le dernier connecteur mysql .net. Est-il possible d'utiliser le framework entitiy pour insérer un blob dans la base de données mysql (comme insert into testtable (blobcolumn) values (compress('aaa'))) ou pour émuler la fonction compress de mysql dans C#, puis insérer le résultat dans la base de données?Simuler la fonction de compression mysql en utilisant C#

Merci

Répondre

0

Spécifiez une option 'UseCompression' dans la chaîne de connexion pour activer la compression des paquets.

+0

est-ce pas à peu près le trafic, pas de stockage? –

+0

Il s'agit de la circulation. Certains moteurs de stockage fournissent également cette fonctionnalité (option de table ROW_FORMAT), par ex. La compression INNODB - http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression.html – Devart

+0

Je ne veux pas compresser la totalité de la table mais plutôt écrire une colonne au format compressé mysql. Pratiquement ce que cela signifie est que je veux insérer un ensemble de données en utilisant .net et sélectionnez le jeu de dates en utilisant la fonction décompresser de mysql. –

1

Veuillez trouver ci-dessous ma mise en œuvre en utilisant Ionic zip. Espérons que ça aide!

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