Binärdaten in MySQL

stimmen
163

Wie speichere ich binäre Daten in MySQL ?

Veröffentlicht am 01/08/2008 um 06:09
quelle vom benutzer
In anderen Sprachen...                            


10 antworten

stimmen
128

Die Antwort von phpguy ist richtig, aber ich denke, es gibt eine Menge Verwirrung in den weiteren Details gibt.

Die grundlegende Antwort ist in einer BLOBDatentyp / Attributdomäne. BLOB ist die Abkürzung für Binary Large Object und das Spaltendatentyp ist spezifisch für binären Datenhandling.

Siehe die entsprechende Handbuch Seite für MySQL .

Beantwortet am 01/08/2008 um 13:16
quelle vom benutzer

stimmen
54

Für eine Tabelle wie folgt aus:

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 IGNORE  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>
Beantwortet am 01/08/2008 um 06:12
quelle vom benutzer

stimmen
37

Ich empfehle dringend , gegen binäre Daten in einer relationalen Datenbank gespeichert werden . Relationale Datenbanken sind entworfen , um mit fester Größe Daten zu arbeiten; das ist , wo ihre Leistungsstärke ist: erinnern Joels alten Artikel darüber , warum Datenbanken sind so schnell? weil es genau 1 Zeiger Schritt nimmt aus einem Datensatz zu einem anderen Datensatz zu bewegen. Wenn Sie BLOB - Daten von undefiniert und stark variierender Größe addieren, werden Sie am Leistungsschraube.

Stattdessen speichern Dateien im Dateisystem und Speichern von Dateinamen in Ihrer Datenbank.

Beantwortet am 17/09/2008 um 21:37
quelle vom benutzer

stimmen
20

Während Sie nicht gesagt haben, was Sie speichern, und Sie können dafür so einen großen Grund haben, oft die Antwort ‚als Dateisystem Referenz‘ und die tatsächlichen Daten irgendwo im Dateisystem.

http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html

Beantwortet am 02/08/2008 um 15:57
quelle vom benutzer

stimmen
16

Es hängt von den Daten , die Sie speichern mögen. Das obige Beispiel verwendet den LONGBLOBDatentyp, aber Sie sollten sich bewusst sein , dass es andere binäre Datenformate:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Jede hat ihre Anwendungsfälle. Handelt es sich um eine bekannte (kurz) Länge (zB gepackte Daten) oft BINARYoder VARBINARYarbeiten werden . Sie haben den zusätzlichen Vorteil auf sie in der Lage Tonne Index zu sein.

Beantwortet am 31/12/2010 um 02:04
quelle vom benutzer

stimmen
13

Zwar ist es nicht erforderlich sein sollte, könnten Sie versuchen, base64 Codierung von Daten in und Dekodieren es aus. Das bedeutet , dass die db wird nur ASCII - Zeichen haben. Es wird ein bisschen mehr Platz und Zeit, aber jede mögliche Ausgabe zu tun mit den binären Daten eliminiert werden.

Beantwortet am 16/09/2008 um 05:07
quelle vom benutzer

stimmen
10

Wenn die - nicht zu empfehlen - BLOB - Feld vorhanden ist , können Sie die Daten auf diese Weise sparen:

mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");

Idee genommen hier .

Beantwortet am 12/09/2013 um 13:00
quelle vom benutzer

stimmen
9

Wenn ich binäre Daten speichern , müssen immer ich VARBINARYFormat, wie es eingeführt byd0nut.

Sie können unter dokumentiert Thema Dokumentation MySQL - Website finden 12.4.2 Der BINARY und VARBINARY - Typen

Wenn Sie fragen , was advantagese sind, schauen Sie bitte in Frage , warum-varbinary-statt-of-varchar

Beantwortet am 01/05/2014 um 10:37
quelle vom benutzer

stimmen
9

Die Frage stellt sich auch , wie die Daten in den BLOB zu bekommen. Sie können die Daten in einer INSERT - Anweisung setzen IGNORE, wie die PHP - Beispiel zeigt (obwohl Sie verwenden sollten mysql_real_escape_string statt addslashes). Wenn die Datei auf dem Datenbankserver vorhanden ist , können Sie auch den Einsatz von MySQL LOAD_FILE

Beantwortet am 27/08/2008 um 16:13
quelle vom benutzer

stimmen
8

Eine viel bessere Speicherimplementierung in verfügbar hier . Sie werden in Probleme mit Florian Implementierung laufen.

Beantwortet am 17/09/2008 um 10:53
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more