2017-02-06 5 views
-1

MySQL DBに保存するbase64_encoded文字列がたくさんあります。しかし、base64_encoded文字列が33%大きいので、私は自分のDBストレージを最適化する方法を知りたいと思います(今はLONG​​TEXTフィールドに文字列を格納しますが、LONGBLOBまたは類似のものはどうですか?だから、どのように私は私のデータを保存することができます(今はbase64でエンコードされている)より最適化されたので、私はストレージスペースを節約します...(値を選択するとき、私はまだbase64を安全に再度エンコードできる必要があります)。Base64 MySQLストレージスペース最適化

おかげ

+0

[バイナリデータが正しく格納されていない](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

あなたはTO_BASE64/FROM、5.6.1以降をお持ちの場合は、()のMySQLでご利用いただけます。

Base64はプレーンなASCIIテキストです。 TEXTにbase64を格納することは問題ありません。 (私は)いたずらな文字がないので、エスケープする必要はありません。しかし、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; 

その方法は、あなたが(おそらく)元の(事前BASE64)データが圧縮した33%の_if以上を取得します。元のファイルが.jpgまたはすでに圧縮されている他のデータの場合は、COMPRESSの代わりにFROM_BASE64を使用することもできます。

+0

したがって、to_base64を圧縮と組み合わせると33.3%のオーバーヘッドが節約されます。 COMPRESS(TO_BASE64(STRING))を使用し、UNCOMPRESS(FROM_BASE64(SELECTED STRING))を選択しますか? –

+0

これはあなたが何を始めるかによって異なります。何かがbase64文字列を生成しているように聞こえて、テーブルにコンパクトに格納したいと思っています。その場合、圧縮する前に変換TO_BASE64を繰り返す必要はありません。 (注:私は私の答えを固定しました。) –

+0

リック、ありがとう私はこれを試してみましょう。また、あなたの最初の例でFROM_BASE64を2回呼び出すのは正しいですか? –