Wie speichere ich Binärdaten in MySQL ?
Wie speichere ich Binärdaten in MySQL ?
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.
Für einen Tisch wie diesen:
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
Hier ist ein PHP-Beispiel:
<?php
// store.php3 - by Florian Dittmer <dittmer@gmx.net>
// Example php script to demonstrate the storing of binary files into
// an sql database. More information can be found at http://www.phpbuilder.com/
?>
<html>
<head><title>Store binary data into SQL Database</title></head>
<body>
<?php
// Code that will be executed if the form has been submitted:
if ($submit) {
// Connect to the database (you may have to adjust
// the hostname, username or password).
mysql_connect("localhost", "root", "password");
mysql_select_db("binary_data");
$data = mysql_real_escape_string(fread(fopen($form_data, "r"), filesize($form_data)));
$result = mysql_query("INSERT INTO binary_data (description, bin_data, filename, filesize, filetype) ".
"VALUES ('$form_description', '$data', '$form_data_name', '$form_data_size', '$form_data_type')");
$id= mysql_insert_id();
print "<p>This file has the following Database ID: <b>$id</b>";
mysql_close();
} else {
// else show the form to submit new data:
?>
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</body>
</html>
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.
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
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
oder VARBINARY
funktioniert. Sie haben den zusätzlichen Vorteil, dass sie in der Lage sind, sie zu indizieren.
Wenn das Feld - nicht empfohlen - BLOB vorhanden ist, können Sie Daten folgendermaßen speichern:
mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");
Idee von hier genommen .
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
Wenn ich Binärdaten speichern muss, verwende ich immer das eingeführte VARBINARY
Format byd0nut
.
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