Binäre Daten in MySQL

8 answers
  • Die Antwort von phpguy ist korrekt, aber ich denke, es gibt viel Verwirrung in den zusätzlichen Details.

    Die grundlegende Antwort liegt in BLOB -Daten Typ / Attribut Domäne. BLOB ist eine Abkürzung für Binary Large Object, und dieser Spaltendatentyp ist spezifisch für die Handhabung von Binärdaten.

    Siehe der jeweiligen Handbuchseite für MySQL .

    02 June 2016
    maurisTim Jarvis
  • Für eine Tabelle wie diese:

     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 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>
     
    02 June 2016
    maurisTim Jarvis
  • Ich empfehle dringend, gegen das Speichern von Binärdaten in einer relationalen Datenbank zu verwenden. Relationale Datenbanken sind so konzipiert, dass sie mit Daten fester Größe arbeiten. Hier liegt ihre Leistungsstärke: Erinnern Sie sich an Joels alter Artikel , warum Datenbanken so schnell sind? weil es genau 1 Zeigerinkrement erfordert, um von einem Datensatz zu einem anderen Datensatz zu wechseln. Wenn Sie BLOB-Daten mit undefinierter und stark variierender Größe hinzufügen, wird die Leistung beeinträchtigt.

    Speichern Sie Dateien stattdessen im Dateisystem und speichern Sie Dateinamen in Ihrer Datenbank.

    02 September 2011
    gcampAhmad
  • Auch wenn Sie nicht gesagt haben, was Sie gespeichert haben, und Sie dafür möglicherweise einen guten Grund haben, lautet die Antwort oft "als Dateisystemreferenz" und die tatsächlichen Daten befinden sich irgendwo im Dateisystem.

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

    02 August 2008
    Issac Kelly
  • Dies hängt von den Daten ab, die Sie speichern möchten. Das obige Beispiel verwendet den Datentyp LONGBLOB, Sie sollten jedoch wissen, 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 (z. B. gepackte Daten) handelt, funktionieren oft BINARY oder VARBINARY. Sie haben den zusätzlichen Vorteil, dass sie einen Index für sie erstellen können.

    15 December 2012
    Aniket KulkarniPeter Lawrey
  • Auch wenn dies nicht notwendig sein sollte, können Sie versuchen, base64 Daten einzugeben und zu dekodieren. Das bedeutet, dass die Datenbank nur ASCII-Zeichen enthält. Es dauert zwar etwas mehr Platz und Zeit, aber alle Probleme mit den Binärdaten werden beseitigt.

    11 July 2014
    Sid Mhuseyint
  • Es stellt sich auch die Frage, wie man die Daten in das BLOB holt. Sie können die Daten in eine INSERT-Anweisung einfügen, wie das PHP-Beispiel zeigt (obwohl Sie mysql_real_escape_string verwenden sollten statt addslashes). Wenn die Datei auf dem Datenbankserver vorhanden ist, können Sie auch die LOAD_FILE

    27 August 2008
    Scott Noyes
  • Eine viel bessere Speicherimplementierung ist in hier verfügbar. Sie werden auf Probleme bei der Implementierung von Florian stoßen.

    02 September 2011
    gcampAhmad