Binárních dat v MySQL

hlasů
163

Jak mohu uložit binární data v MySQL ?

Položena 01/08/2008 v 06:09
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
128

Odpověď by phpguy je správné, ale myslím, že je zde mnoho nejasností v dalších detailů tam.

Základní odpověď je v BLOBdoméně datového typu / atributu. BLOB je zkratka pro binary large object a že sloupec datový typ je specifický pro manipulaci binárních dat.

Viz příslušné manuálové stránky pro MySQL .

Odpovězeno 01/08/2008 v 13:16
zdroj uživatelem

hlasů
54

Pro tabulku, jako je tento:

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

Zde je příklad 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>
Odpovězeno 01/08/2008 v 06:12
zdroj uživatelem

hlasů
37

Doporučuji proti ukládání binárních dat v relační databázi. Relační databáze jsou navrženy pro práci s pevným velikosti dat; že je místo, kde jejich síla výkon: zapamatovat Joel starou článek o tom, proč jsou databáze tak rychle? protože to trvá přesně 1 ukazatel přírůstek přejít ze záznamu do jiného záznamu. Přidáte-li BLOB data nedefinovaném a obrovsky různé velikosti, budete mhouřit výkon.

Místo toho, ukládání souborů v systému souborů a názvy úložiště souborů v databázi.

Odpovězeno 17/09/2008 v 21:37
zdroj uživatelem

hlasů
20

I když jste neřekl, co jste ukládání a může mít velký důvod pro dělání tak často odpověď je ‚jako odkaz souborového systému‘ a skutečných dat je v souborovém systému někde.

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

Odpovězeno 02/08/2008 v 15:57
zdroj uživatelem

hlasů
16

Záleží na data, která chcete uložit. Výše uvedený příklad používá LONGBLOBdatový typ, ale měli byste si být vědomi toho, že existují i jiné binární datové formáty:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Každý z nich má své případy použití. Pokud se jedná o známé (short) délka (např balené data) často dokonce BINARYani VARBINARYbude fungovat. Mají tu výhodu, že jsou schopni index ton na ně.

Odpovězeno 31/12/2010 v 02:04
zdroj uživatelem

hlasů
13

I když to by nemělo být nutné, můžete zkusit base64dat kódování v rámci dekódování ven. To znamená, že db bude mít jen ASCII znaky. Bude to trvat o něco více prostoru a času, ale žádný problém, co dělat s budou odstraněny binární data.

Odpovězeno 16/09/2008 v 05:07
zdroj uživatelem

hlasů
10

V případě, že - se nedoporučuje - BLOB pole existuje, můžete ukládat data tímto způsobem:

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

Idea převzat z zde .

Odpovězeno 12/09/2013 v 13:00
zdroj uživatelem

hlasů
9

Když potřebuji k ukládání binárních dat Vždycky jsem použít VARBINARYformát, který byl zaveden byd0nut.

Naleznete v dokumentaci na webových stránkách MySQL pod zdokumentované téma 12.4.2 binární a typy varbinary

Pokud se ptáte, jaké jsou advantagese, prosím, podívejte se na otázku, proč-varbinary-místo-of-varchar

Odpovězeno 01/05/2014 v 10:37
zdroj uživatelem

hlasů
9

Dále vyvstává otázka, jak se dostat data do BLOB. Můžete si dát data v INSERT ignorovat prohlášení, jak ukazuje příklad PHP (i když byste měli použít mysql_real_escape_string místo addslashes). Pokud soubor existuje na databázovém serveru, můžete také použít MySQL LOAD_FILE

Odpovězeno 27/08/2008 v 16:13
zdroj uživatelem

hlasů
8

Mnohem lepší implementace ukládání do dispozici zde . Budete narazit na problémy s realizací Floriána.

Odpovězeno 17/09/2008 v 10:53
zdroj uživatelem

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