2012-05-27 5 views
10

Ich bin Serialisierung viele Arrays in PHP, die in einer Datenbank mit mysql gespeichert werden sollen.Welcher mysql Spaltentyp für Serialisierung (Daten)?

Die Länge der letzten Saite kann stark variieren zwischen 2000 und 100.000+, ich frage mich, was wäre die beste Spalte für diesen Typ?

Ich habe es derzeit als LONGTEXT eingestellt, aber ich fühle, dass das Overkill ist! Die Datenbank ist bereits aktiv und hat ungefähr 3 Millionen Zeilen. Dies ist eine neue Spalte, die demnächst hinzugefügt wird.

Dank

+4

100.000 Zeichen schränkt Ihre Optionen sehr stark ein. Auch wenn Sie diese Arrays in MySQL manipulieren oder durchsuchen oder grundsätzlich alles andere als einen riesigen Datenblock behandeln möchten, sollten Sie sie ordnungsgemäß speichern und nicht serialisieren. – Corbin

+0

Es ist nur ein Speicher-Center für Daten, die über PHP angezeigt werden, Manipulation über MySQL wird nie passieren. Danke @corbin – hadley

+0

besser weg mit longbinary Feldtypen. Alle Textfelder unterliegen Zeichensatzübersetzungen, die Ihre serialisierten Daten beschädigen könnten. –

Antwort

15

verwenden Sie die Wirkung ein BLOB data-type für Daten serialisiert, so dass es in einer binären sicheren Art und Weise abgeschnitten und bricht die Serialisierung nicht bekommen. Wenn die Länge der letzten Zeichenfolge nicht maximal ist, benötigen Sie LONGBLOB. Wenn Sie wissen, dass die Daten 2^24 Zeichen nicht ausfüllen, können Sie eine MEDIUMBLOB verwenden. MEDIUMBLOB ist etwa 16 MB, während LONGBLOB etwa 4 GB ist, so würde ich sagen, Ihre ziemlich sicher mit MEDIUMBLOB.

Warum ein binärer Datentyp? Text Datentypen in Mysql haben eine Kodierung. Die Zeichencodierung wirkt sich darauf aus, wie die serialisierten Daten zwischen den verschiedenen Codierungen übertragen werden. Z.B. Wenn sie als Latin-1 gespeichert, dann aber als UTF-8 ausgelesen werden (z. B. wegen der Einstellung der Verbindungseinstellung für die Datenbanktreiber), können die serialisierten Daten beschädigt werden, da sich die binären Offsets zwar verschoben haben, die serialisierten Daten jedoch nicht für solche Verschiebungen codiert wurden. Die serialisierten Strings von PHP sind Binärdaten, nicht mit einer bestimmten Codierung.

7

Sie sollten BLOB wählen (als Marc B angegeben) pro PHP-Handbuch für serialize():

„Beachten Sie, dass diese [Ausgänge] eine binäre Zeichenfolge, die Null-Bytes enthalten kann und muss gespeichert werden und als solche behandelt werden. Zum Beispiel sollte die serialize() -Ausgabe im Allgemeinen in einem BLOB-Feld in einer Datenbank statt in einem CHAR- oder TEXT-Feld gespeichert werden.

Quelle: http://php.net/serialize

Natürlich J.Money die Eingabe in Bezug auf Größen als auch berücksichtigt werden, müssen - auch BLOB seine Grenzen hat, und wenn man sie gehen zu überschreiten, dann würden Sie MEDIUMBLOB oder LONGBLOB brauchen .

Verwandte Themen