2017-02-06 15 views
-1

У меня есть множество строк base64_encoded, которые я сохраняю в своей базе данных MySQL. Однако, поскольку строки base64_encoded на 33% больше, я хотел бы знать, как я могу оптимизировать свое хранилище БД (теперь я храню свои строки в поле LONGTEXT, но как насчет LONGBLOB или чего-то подобного?). Итак, как я могу сохранить свои данные (которые теперь кодируются base64), более оптимизирован, поэтому я сохраняю пространство для хранения ... (При выборе значения я все равно должен иметь возможность снова закодировать его base64).Base64 Оптимизация пространства памяти MySQL

Благодаря

+0

В соответствии с вашими комментариями в [Двоичные данные не были правильно сохранены в MySQL] (https://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql#comment71308438_42067769): * " вопрос заключается в том, как оптимизировать хранение данных base64_encoded ... в mysql "*. Как этот вопрос отличается от вашего предыдущего вопроса? И вы должны показать свой код. – jww

+0

Возможный дубликат [Двоичные данные не были правильно сохранены в MySQL] (http://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql) – jww

+0

@jww - эти ссылки указывают, что вы не следует рассматривать капли как строки. –

ответ

0

Если у вас есть 5.6.1 или более поздней версии, FROM/TO_BASE64() доступны в MySQL.

Base64 - простой текст ascii. Хранение base64 в TEXT не проблема. Никакого выхода не нужно, поскольку (я думаю) нет непослушных персонажей. Но для хранения результата FROM_BASE64 нужен BLOB (определенного размера).

Итак ...

INSERT INTO t (myblob) VALUES (FROM_BASE64('UmljayBKYW1lcw==')); 

SELECT TO_BASE64(myblob) FROM t; 

FROM_BASE64 будет восстановить исходные данные (предварительно base64).

Еще лучше было бы сжать вместо:

INSERT INTO t (myblob) VALUES (COMPRESS('UmljayBKYW1lcw==')); 

SELECT UNCOMPRESS(myblob) FROM t; 

Таким образом, вы (вероятно) получить больше, чем 33% _If исходные данные (предварительно base64) был сжимаемым. Если оригинал был .jpg или некоторые другие уже сжатые данные, вы можете также использовать FROM_BASE64 вместо COMPRESS.

+0

Итак, используя to_base64 в сочетании с компрессией, я сохраню 33,3% накладных расходов base64_encoded? Поэтому я буду использовать COMPRESS (TO_BASE64 (STRING)) и выбрать UNCOMPRESS (FROM_BASE64 (SELECTED STRING))? –

+0

Это зависит от того, с чего вы начинаете. Казалось, что-то генерирует строки base64, и вы хотите сохранить их компактно в таблице. В этом случае нет необходимости повторять преобразование TO_BASE64 перед сжатием. (Примечание: я исправил свой ответ.) –

+0

Рик, спасибо, я попробую это. Кроме того, правильно ли вы дважды вызываете FROM_BASE64 в первом примере? –