Binære data i MySQL

stemmer
169

Hvordan jeg lagre binære data i do MySQL ?

Publisert på 01/08/2008 klokken 05:09
kilden bruker
På andre språk...                            


10 svar

stemmer
131

Svaret av phpguy er riktig, men jeg tror det er mye forvirring i ytterligere detaljer der.

Den grunnleggende svaret på en BLOBdatatype / attributt domene. BLOB er en forkortelse for Binary Large Object og at kolonnedatatypen er spesifikk for håndtering av binære data.

Se den relevante manualen side for MySQL .

Svarte 01/08/2008 kl. 12:16
kilden bruker

stemmer
56

For en tabell som dette:

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

Her er en PHP eksempel:

<?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>
Svarte 01/08/2008 kl. 05:12
kilden bruker

stemmer
37

Jeg anbefaler på det sterkeste mot å lagre binære data i en relasjonsdatabase. Relasjonsdatabaser er utformet for å arbeide med fast størrelse data; det er der deres prestasjoner styrke er: husk Joels gammel artikkel om hvorfor databaser er så fort? fordi det tar nøyaktig 1 pekeren inkrement til å bevege seg fra en plate til en annen registrering. Hvis du legger BLOB data av udefinert og vesentlig forskjellig størrelse, vil du skru opp ytelsen.

Istedenfor lagre filer i filsystemet, og lagre filnavn i databasen.

Svarte 17/09/2008 kl. 20:37
kilden bruker

stemmer
21

Selv om du ikke har sagt hva du lagrer, og du kan ha en god grunn for å gjøre det, ofte svaret er 'som et filsystem referanse' og de faktiske dataene er på filsystemet eller annet sted.

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

Svarte 02/08/2008 kl. 14:57
kilden bruker

stemmer
16

Det avhenger av dataene du ønsker å lagre. Eksempelet ovenfor bruker LONGBLOBdatatype, men du bør være klar over at det finnes andre binære data formater:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Hver har sine bruksområder. Hvis det er et kjent (kort) lengde (f.eks pakkede data) ofte ganger BINARYeller VARBINARYvil fungere. De har den ekstra fordelen av å kunne tonn indeksen på dem.

Svarte 31/12/2010 kl. 01:04
kilden bruker

stemmer
13

Selv om det ikke skulle være nødvendig, kan du prøve å base64kode data i og dekoding den ut. Det betyr at db må bare ASCII-tegn. Det vil ta litt mer tid og rom, men noe problem å gjøre med binære data vil bli eliminert.

Svarte 16/09/2008 kl. 04:07
kilden bruker

stemmer
10

Hvis - anbefales ikke - det finnes BLOB-feltet, kan du lagre data på denne måten:

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

Ideen er hentet fra her .

Svarte 12/09/2013 kl. 12:00
kilden bruker

stemmer
9

Når jeg trenger å lagre binære data jeg bruker alltid VARBINARYformat, som introduserte byd0nut.

Du kan finne dokumentasjon på MySQL nettside under dokumentert emne 12.4.2 binær og VARBINARY Typer

Hvis du spør hva er advantagese, kan du se på spørsmålet hvorfor-VARBINARY-stedet-of-varchar

Svarte 01/05/2014 kl. 09:37
kilden bruker

stemmer
9

Spørsmålet melder seg også hvordan å få data inn i BLOB. Du kan sette dataene i en INSERT-setning, som PHP eksemplet viser (selv om du bør bruke mysql_real_escape_string stedet for addslashes). Hvis filen finnes på databaseserveren, kan du også bruke MySQL LOAD_FILE

Svarte 27/08/2008 kl. 15:13
kilden bruker

stemmer
8

En mye bedre lagringsplass implementering i tilgjengelig her . Du vil kjøre inn i problemer med Florian implementering.

Svarte 17/09/2008 kl. 09:53
kilden bruker

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