2017-02-06 5 views
-1

Ich habe viel base64_encoded Strings, die ich in meiner MySQL-DB speichern. Da base64_encoded Strings jedoch 33% größer sind, würde ich gerne wissen, wie ich meinen DB-Speicher optimieren kann (Jetzt speicher ich meine Strings in einem LONGTEXT-Feld, aber was ist mit LONGBLOB oder ähnlichem?). Also, wie kann ich meine Daten (die jetzt base64-codiert sind) besser optimieren, damit ich Speicherplatz sparen kann ... (Wenn ich den Wert auswähle, muss ich ihn wieder sicher in base64 verschlüsseln können).Base64 MySQL Speicherplatz Optimalisierung

Dank

+0

Nach Ihren Kommentaren zu [Binärdaten nicht ordnungsgemäß in MySQL gespeichert] (https://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql#comment71308438_42067769): * "Die Frage ist, wie ich die Speicherung von base64_encoded Daten ... in mysql "* optimieren kann. Wie unterscheidet sich diese Frage von Ihrer vorherigen Frage? Und Sie sollten Ihren Code zeigen. diese Links, die Sie darauf hinweisen - – jww

+0

Mögliche Duplikat (http://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql) – jww

+0

@jww [Binärdaten nicht richtig in MySQL gespeichert] Blobs sollten nicht als Strings behandelt werden. –

Antwort

0

Wenn Sie 5.6.1 oder höher, FROM/TO_BASE64() sind in MySQL zur Verfügung.

Base64 ist reiner ASCII-Text. Speichern von Base64 in einem TEXT ist kein Problem. Kein Entkommen ist notwendig, da (denke ich) es keine ungezogenen Charaktere gibt. Aber das Speichern des Ergebnisses von FROM_BASE64 benötigt eine BLOB (einiger Größe).

So ...

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

SELECT TO_BASE64(myblob) FROM t; 

Die FROM_BASE64 die ursprünglichen (pre-base64) Daten rekonstruieren.

Noch besser wäre es, anstatt zu komprimieren:

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

SELECT UNCOMPRESS(myblob) FROM t; 

Auf diese Weise werden Sie (wahrscheinlich) bekommen mehr als die 33% _if das Original (pre-base64) Daten komprimierbar war. Wenn das Original eine .jpg oder eine andere bereits komprimierte Daten war, dann können Sie auch FROM_BASE64 anstelle von COMPRESS verwenden.

+0

Also, die Verwendung von to_base64 kombiniert mit komprimieren wird mir die 33,3% Overhead base64_encoded haben? Also werde ich COMPRESS (TO_BASE64 (STRING)) verwenden und UNCOMPRESS (FROM_BASE64 (SELECTED STRING)) auswählen? –

+0

Es hängt davon ab, mit was Sie beginnen. Es klang, als ob etwas Base64-Strings erzeugt und Sie diese kompakt in einer Tabelle speichern möchten. In diesem Fall muss die Konvertierung TO_BASE64 vor der Komprimierung nicht wiederholt werden. (Anmerkung: Ich habe meine Antwort korrigiert.) –

+0

Rick, danke, ich werde es versuchen. Außerdem ist es richtig, dass Sie FROM_BASE64 zweimal bei Ihrem ersten Beispiel aufrufen? –