Имитация функции сжатия MySQL с использованием C # - PullRequest
0 голосов
/ 22 февраля 2012

Я хотел бы вставить некоторые байтовые данные в столбец BLOB-объектов mysql. Данные большие, поэтому я хочу сохранить их в сжатом виде.

Я использую Entity Framework 3.5SP1 для вставки данных в базу данных mysql, используя последний соединитель mysql .net. Есть ли способ либо использовать рамку полномочий, чтобы вставить большой двоичный объект в базу данных mysql (например, insert into testtable (blobcolumn) values (compress('aaa'))), либо эмулировать функцию mysql compress в c #, а затем вставить результат в базу данных?

Спасибо

Ответы [ 2 ]

1 голос
/ 31 июля 2013

Ниже приведена моя реализация с использованием Ionic zip .Надеюсь, это поможет!

</p>

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

0 голосов
/ 22 февраля 2012

Укажите параметр 'UseCompression' в строке подключения, чтобы включить сжатие пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...