Wie speichere ich Binärdaten in MySQL ?
mysql
database
binary-data
data-storage
Geoff Dalgas
quelle
quelle
Antworten:
Die Antwort von phpguy ist richtig, aber ich denke, dass die zusätzlichen Details dort viel Verwirrung stiften.
Die grundlegende Antwort liegt in einer
BLOB
Datentyp- / Attributdomäne. BLOB ist die Abkürzung für Binary Large Object und dieser Spaltendatentyp ist spezifisch für die Verarbeitung von Binärdaten.Siehe die entsprechende Handbuchseite für MySQL .
quelle
Für einen Tisch wie diesen:
Hier ist ein PHP-Beispiel:
quelle
Ich empfehle dringend , gegen binäre Daten in einer relationalen Datenbank gespeichert werden . Relationale Datenbanken sind für die Arbeit mit Daten fester Größe ausgelegt. Hier liegt ihre Leistungsstärke: Erinnern Sie sich an Joels alten Artikel darüber, warum Datenbanken so schnell sind? weil es genau 1 Zeigerinkrement braucht, um von einem Datensatz zu einem anderen Datensatz zu wechseln. Wenn Sie BLOB-Daten von undefinierter und stark variierender Größe hinzufügen, wird die Leistung beeinträchtigt.
Speichern Sie stattdessen Dateien im Dateisystem und Dateinamen in Ihrer Datenbank.
quelle
Obwohl Sie nicht gesagt haben, was Sie speichern, und Sie haben möglicherweise einen guten Grund dafür, lautet die Antwort häufig "als Dateisystemreferenz" und die tatsächlichen Daten befinden sich irgendwo im Dateisystem.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
quelle
Dies hängt von den Daten ab, die Sie speichern möchten. Im obigen Beispiel wird der
LONGBLOB
Datentyp verwendet. Beachten Sie jedoch, dass es andere binäre Datenformate gibt:TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
Jeder hat seine Anwendungsfälle. Wenn es sich um eine bekannte (kurze) Länge handelt (z. B. gepackte Daten) , funktioniert dies oft
BINARY
oderVARBINARY
funktioniert. Sie haben den zusätzlichen Vorteil, dass sie in der Lage sind, sie zu indizieren.quelle
Obwohl dies nicht erforderlich sein sollte, können Sie versuchen
base64
, Daten ein- und auszukodieren. Das bedeutet, dass die Datenbank nur ASCII-Zeichen enthält. Es wird etwas mehr Platz und Zeit in Anspruch nehmen, aber jedes Problem mit den Binärdaten wird beseitigt.quelle
Wenn das Feld - nicht empfohlen - BLOB vorhanden ist, können Sie Daten folgendermaßen speichern:
Idee von hier genommen .
quelle
Es stellt sich auch die Frage, wie die Daten in das BLOB gelangen. Sie können die Daten in eine INSERT-Anweisung einfügen, wie das PHP-Beispiel zeigt (obwohl Sie mysql_real_escape_string anstelle von Addslashes verwenden sollten). Wenn die Datei auf dem Datenbankserver vorhanden ist, können Sie auch LOAD_FILE von MySQL verwenden
quelle
Wenn ich Binärdaten speichern muss, verwende ich immer das eingeführte
VARBINARY
Formatbyd0nut
.Die Dokumentation finden Sie auf der MySQL-Website unter dem dokumentierten Thema 12.4.2 Die Typen BINARY und VARBINARY
Wenn Sie fragen, was vorteilhaft ist, schauen Sie sich bitte die Frage an, warum-varbinary-anstelle-von-varchar
quelle