mysql - stockée - stocker une image dans une base de données sql server




Données binaires dans MySQL (6)

Comment stocker des données binaires dans MySQL ?


Bien que cela ne devrait pas être nécessaire, vous pouvez essayer d’encoder et de décoder les données en base64 . Cela signifie que la base de données n’aura que des caractères ASCII. Cela prendra un peu plus de temps et d’espace, mais tout problème lié aux données binaires sera éliminé.


Bien que vous n'ayez pas dit ce que vous stockiez et que vous ayez peut-être une bonne raison de le faire, la réponse est souvent «en tant que référence de 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


Je déconseille fortement de stocker 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 en matière de performance: rappelez-vous le vieil article de Joel sur la raison pour laquelle les bases de données sont 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 non définie et extrêmement variable, vous risquez de perdre des performances.

À la place, stockez des fichiers dans le système de fichiers et stockez les noms de fichiers dans votre base de données.


La question se pose également de savoir comment importer 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 deviez utiliser mysql_real_escape_string au lieu de addlashes). Si le fichier existe sur le serveur de base de données, vous pouvez également utiliser LOAD_FILE de MySQL LOAD_FILE


Lorsque j'ai besoin de stocker des données binaires, j'utilise toujours le format VARBINARY , tel que introduit par byd0nut .

Vous trouverez la documentation sur le site Web de MySQL sous la rubrique documentée 12.4.2 Les types BINARY et VARBINARY

Si vous vous demandez quels sont les avantages, consultez la question why-varbinary-instead-of-varchar


Pour un tableau comme celui-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 <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>




data-storage