Bináris adatokat MySQL

szavazat
163

Hogyan kell tárolni bináris adatokat MySQL ?

A kérdést 01/08/2008 06:09
a forrás felhasználó
Más nyelveken...                            


10 válasz

szavazat
128

A válasz szerint phpguy helyes, de azt hiszem, van egy csomó zavart a további részleteket is.

Az alapvető válasz egy BLOBadattípus / tulajdonság tartományban. BLOB rövid az a nagy bináris objektum és az oszlop adattípus specifikus kezelési bináris adatokat.

Lásd a vonatkozó man oldalon MySQL .

Válaszolt 01/08/2008 13:16
a forrás felhasználó

szavazat
54

Egy ilyen asztal:

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

Itt van egy PHP példa:

<?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>
Válaszolt 01/08/2008 06:12
a forrás felhasználó

szavazat
37

Azt javasoljuk ellen bináris adatok tárolására egy relációs adatbázisban. A relációs adatbázisok tervezték, hogy a fix méretű adatok; ez az, ahol a teljesítmény erőssége: emlékezzen Joel régi cikket , hogy miért adatbázisok olyan gyorsan? mert tart pontosan 1 mutató növekmény elmozdulni a rekordot egy másik rekordot. Ha hozzá BLOB adatok meghatározatlan és jelentősen változó méretű, akkor csavarja fel a teljesítményt.

Ehelyett, fájlok tárolása a fájlrendszerben, és tárolja fájlneveket az adatbázisban.

Válaszolt 17/09/2008 21:37
a forrás felhasználó

szavazat
20

Bár még nem mondta, amit tárolására, és akkor lehet, hogy egy jó indoka erre, gyakran a válasz „mint a fájlrendszer referencia” és a tényleges adatok a fájlrendszer valahol.

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

Válaszolt 02/08/2008 15:57
a forrás felhasználó

szavazat
16

Ez függ a kívánt adatokat tárolni. A fenti példában a LONGBLOBadattípus, de tudnia kell, hogy vannak más bináris adat formátumok:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Minden megvan a használati esetek. Ha ez egy ismert (rövid) hosszúságú (pl csomagolt adatok) sokszor BINARYvagy VARBINARYműködni fog. Ezek az előnye, hogy képes ton index rájuk.

Válaszolt 31/12/2010 02:04
a forrás felhasználó

szavazat
13

Bár nem feltétlenül szükséges, akkor próbálja meg base64a kódolási adatokat és dekódolja azt. Ez azt jelenti, db majd csak ASCII karaktereket. Időbe fog telni, egy kicsit több teret és az időt, de a kérdés, hogy köze van a bináris adatok megszűnik.

Válaszolt 16/09/2008 05:07
a forrás felhasználó

szavazat
10

Ha a - nem ajánlott - BLOB mező létezik, akkor mentse az adatok ilyen módon:

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

Idea vett itt .

Válaszolt 12/09/2013 13:00
a forrás felhasználó

szavazat
9

Mikor kell tárolni bináris adatokat mindig használom VARBINARYformátumban, bevezette byd0nut.

Megtalálható dokumentációt MySQL honlapján alatt dokumentált téma 12.4.2 bináris és VARBINARY típusai

Ha az a kérdés, hogy mit is advantagese, kérlek nézd meg kérdés , hogy miért-varbinary-helyett-of-varchar

Válaszolt 01/05/2014 10:37
a forrás felhasználó

szavazat
9

Az a kérdés is felmerül, hogyan lehet az adatokat a BLOB. Tudod, hogy az adatokat egy INSERT MELLŐZ nyilatkozatot, mint a PHP példa mutatja (bár akkor használja mysql_real_escape_string helyett addslashes). Ha a fájl létezik az adatbázis szerver, akkor is használhatja a MySQL LOAD_FILE

Válaszolt 27/08/2008 16:13
a forrás felhasználó

szavazat
8

Egy sokkal jobb tárolási végrehajtására rendelkezésre álló itt . Akkor befut kérdéseket Florian végrehajtását.

Válaszolt 17/09/2008 10:53
a forrás felhasználó

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