database - Données binaires dans MySQL

Translate

Comment stocker des données binaires dansMySQL?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Mat
Translate

La réponse de phpguy est correcte mais je pense qu'il y a beaucoup de confusion dans les détails supplémentaires.

La réponse de base est dans unGOUTTEtype de données / domaine d'attribut.BLOBest l'abréviation de Binary Large Object et ce type de données de colonne est spécifique à la gestion des données binaires.

Voirla page de manuel pertinente pour MySQL.

La source
Hedda Lee
Translate

Pour une table comme celle-ci:

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)
);

Voici un exemple PHP:

<?php
    // store.php3 - by Florian Dittmer <[email protected]>
    // 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>
La source
Translate

Je recommande fortementcontrestocker des données binaires dans une base de données relationnelle. Les bases de données relationnelles sont conçues pour fonctionner avec des données de taille fixe; c'est là que réside leur force de performance: rappelez-vousAncien article de Joelpourquoi les bases de données sont-elles si rapides? car il faut exactement 1 incrément de pointeur pour passer d'un enregistrement à un autre. Si vous ajoutez des données BLOB de taille indéfinie et très variable, vous allez bousiller les performances.

Au lieu de cela, stockez les fichiers dans le système de fichiers et stockez les noms de fichiers dans votre base de données.

La source
Translate

Bien que vous n'ayez pas dit ce que vous stockez, et que vous avez peut-être une bonne raison de le faire, la réponse est souvent «comme référence au système de fichiers» et les données réelles se trouvent quelque part sur le système de fichiers.

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

La source
Translate

Cela dépend des données que vous souhaitez stocker. L'exemple ci-dessus utilise leLONGBLOBtype de données, mais sachez qu'il existe d'autres formats de données binaires:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Chacun a ses cas d'utilisation. S'il s'agit d'une longueur connue (courte) (par exemple, des données compactées)BINARYouVARBINARYmarchera. Ils ont l'avantage supplémentaire de pouvoir les indexer.

La source
Translate

Bien que cela ne soit pas nécessaire, vous pouvez essayerbase64encoder les données et les décoder. Cela signifie que la base de données n'aura que des caractères ascii. Cela prendra un peu plus d'espace et de temps, mais tout problème lié aux données binaires sera éliminé.

La source
Perry Lee
Translate

Si la -non recommandé- Le champ BLOB existe, vous pouvez enregistrer les données de cette façon:

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

Idée tirée deici.

La source
Translate

La question se pose également de savoir comment obtenir les données dans le BLOB. Vous pouvez mettre les données dans une instruction INSERT, comme le montre l'exemple PHP (bien que vous devriez utilisermysql_real_escape_stringau lieu d'ajouter des barres obliques). Si le fichier existe sur le serveur de base de données, vous pouvez également utiliser MySQLFICHIER DE CHARGEMENT

La source
Translate

Lorsque j'ai besoin de stocker des données binaires, j'utilise toujoursVARBINARYformat, tel qu'introduitbyd0nut.

Vous pouvez trouver de la documentation sur le site Web de MySQL sous un sujet documenté12.4.2 Les types BINARY et VARBINARY

Si vous demandez quels sont les avantages, veuillez regarder la questionpourquoi-varbinary-au lieu-de-varchar

La source