Date binare în MySQL

voturi
163

Cum pot stoca date binare în MySQL ?

Întrebat 01/08/2008 la 06:09
sursa de către utilizator
În alte limbi...                            


10 răspunsuri

voturi
128

Răspunsul lui phpguy este corectă, dar cred că există o mulțime de confuzie în detalii suplimentare acolo.

Răspunsul de bază este într - un BLOBdomeniu de tip / atribut de date. BLOB este prescurtarea de la obiect mare binar și că tipul de date coloană este specific pentru manipularea datelor binare.

A se vedea pagina de manual relevantă pentru MySQL .

Publicat 01/08/2008 la 13:16
sursa de către utilizator

voturi
54

Pentru un tabel de genul:

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

Aici este un exemplu 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>
Publicat 01/08/2008 la 06:12
sursa de către utilizator

voturi
37

Vă recomandăm cu tărie împotriva stocarea datelor binare într - o bază de date relațională. Bazele de date relaționale sunt proiectate pentru a lucra cu date de dimensiuni fixe; care este în cazul în care puterea lor de performanță este: amintiți - vă de articol vechi al lui Joel pe bazele de date ce sunt atât de repede? deoarece este nevoie de exact 1 pointer creștere pentru a trece de la o înregistrare la un alt record. Dacă adăugați date BLOB de dimensiuni nedefinită și cu mult variate, va strica performanta.

În schimb, stocați fișiere în sistemul de fișiere, și nume de fișiere magazin în baza de date.

Publicat 17/09/2008 la 21:37
sursa de către utilizator

voturi
20

În timp ce nu ați spus ceea ce stocarea, și este posibil să aveți un motiv de mare pentru a face acest lucru, de multe ori răspunsul este „ca referință sistem de fișiere“ și datele reale este pe sistemul de fișiere undeva.

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

Publicat 02/08/2008 la 15:57
sursa de către utilizator

voturi
16

Aceasta depinde de datele pe care doriți să magazin. Exemplul de mai sus utilizează LONGBLOBtipul de date, dar ar trebui să fie conștienți de faptul că există alte formate de date binare:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Fiecare are cazuri de utilizare. Dacă este un cunoscut lungime (scurtă) ( de exemplu , datele ambalate) de multe ori BINARYsau VARBINARYva funcționa. Ei au avantajul suplimentar de a fi în măsură indicele de tone pe ele.

Publicat 31/12/2010 la 02:04
sursa de către utilizator

voturi
13

Deși nu ar trebui să fie necesar, ați putea încerca base64date de codificare în și decodarea - l. Asta înseamnă că db va avea doar caractere ASCII. Acesta va lua un pic mai mult spațiu și timp, dar orice problemă de a face cu datele binare vor fi eliminate.

Publicat 16/09/2008 la 05:07
sursa de către utilizator

voturi
10

În cazul în care - nu este recomandat - există câmpul BLOB, puteți salva datele în acest fel:

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

Ideea luat de aici .

Publicat 12/09/2013 la 13:00
sursa de către utilizator

voturi
9

Când am nevoie pentru a stoca date binare am folosi întotdeauna VARBINARYformatul, cum a fost introdus byd0nut.

Puteți găsi documentație pe site - ul MySQL sub un subiect documentat 12.4.2 si Binare Tipuri de VARBINARY

Dacă te întrebi ce sunt advantagese, vă rugăm să se uite la întrebarea de ce-VARBINARY-loc-de-varchar

Publicat 01/05/2014 la 10:37
sursa de către utilizator

voturi
9

Problema se pune , de asemenea , cum să obțineți datele în BLOB. Puteți pune datele într - o declarație INSERT IGNORE, cum arată exemplul PHP (deși ar trebui să utilizați mysql_real_escape_string în loc de addslashes). Dacă fișierul există pe serverul de baze de date, puteți utiliza , de asemenea , MySQL LOAD_FILE

Publicat 27/08/2008 la 16:13
sursa de către utilizator

voturi
8

O implementare de stocare mult mai bine în disponibil aici . Vei rula în probleme cu implementarea lui Florian.

Publicat 17/09/2008 la 10:53
sursa de către utilizator

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