Les données binaires dans MySQL

voix
163

Comment puis-je stocker des données binaires MySQL ?

Créé 01/08/2008 à 06:09
source utilisateur
Dans d'autres langues...                            


10 réponses

voix
128

La réponse par phpguy est correct, mais je pense qu'il ya beaucoup de confusion dans les détails là-bas supplémentaires.

La réponse de base est dans un BLOBdomaine type de données / attribut. Blob est l' abréviation de Binary Large Object et ce type de données de la colonne est spécifique pour le traitement des données binaires.

Voir la page de manuel pertinent pour MySQL .

Créé 01/08/2008 à 13:16
source utilisateur

voix
54

Pour une table comme ceci:

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 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>
Créé 01/08/2008 à 06:12
source utilisateur

voix
37

Je recommande fortement contre le stockage des données binaires dans une base de données relationnelle. Bases de données relationnelles sont conçus pour fonctionner avec des données de taille fixe; c'est là la force de leur performance est: rappelez - vous l' ancien article de Joël pourquoi les bases de données sont si rapides? car il faut exactement 1 incrément de pointeur pour passer d'un dossier à un autre enregistrement. Si vous ajoutez des données BLOB de taille non définie et largement variable, vous bousiller la performance.

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

Créé 17/09/2008 à 21:37
source utilisateur

voix
20

Alors que vous ne l'avez pas dit ce que vous stockez, et vous pouvez avoir une bonne raison de le faire, souvent, la réponse est « comme référence du système de fichiers » et les données réelles est sur le système de fichiers quelque part.

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

Créé 02/08/2008 à 15:57
source utilisateur

voix
16

Cela dépend des données que vous souhaitez enregistrer. L'exemple ci - dessus utilise le LONGBLOBtype de données, mais vous devez savoir qu'il existe d'autres formats de données binaires:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Chacun a ses cas d'utilisation. Si elle est connue longueur (courte) (par exemple des données emballées) souvent fois BINARYou VARBINARYfonctionnera. Ils ont l'avantage d'être en mesure l' indice de tonnes sur eux.

Créé 31/12/2010 à 02:04
source utilisateur

voix
13

Bien qu'il ne devrait pas être nécessaire, vous pouvez essayer des base64données de codage et le décodage en dehors. Cela signifie que le db aura juste des caractères ascii. Il faudra un peu plus d' espace et de temps, mais toute question à faire avec les données binaires seront éliminés.

Créé 16/09/2008 à 05:07
source utilisateur

voix
10

Si la - non recommandée - 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 prise d' ici .

Créé 12/09/2013 à 13:00
source utilisateur

voix
9

Lorsque j'ai besoin de stocker des données binaires que j'utilise toujours le VARBINARYformat, tel que présenté byd0nut.

Vous pouvez trouver de la documentation sur le site Web MySQL sous documenté sujet 12.4.2 Le BINARY et VARBINARY Types

Si vous demandez quels sont advantagese, s'il vous plaît vous à la question pourquoi-varbinary-place-de-varchar

Créé 01/05/2014 à 10:37
source utilisateur

voix
9

La question se pose également comment obtenir les données dans le blob. Vous pouvez mettre les données dans une déclaration INSERT IGNORE, comme le montre par exemple PHP (bien que vous devez utiliser mysql_real_escape_string au lieu de addslashes). Si le fichier existe sur le serveur de base de données, vous pouvez également utiliser MySQL de LOAD_FILE

Créé 27/08/2008 à 16:13
source utilisateur

voix
8

Une meilleure mise en œuvre de stockage disponible ici . Vous rencontrez des problèmes avec la mise en œuvre de Florian.

Créé 17/09/2008 à 10:53
source utilisateur

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