Dane binarne w MySQL

głosy
163

W jaki sposób przechowywania danych binarnych w MySQL ?

Utwórz 01/08/2008 o 06:09
źródło użytkownik
W innych językach...                            


10 odpowiedzi

głosy
54

Na stole w taki sposób:

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

Oto przykład 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>
Odpowiedział 01/08/2008 o 06:12
źródło użytkownik

głosy
128

Odpowiedź przez phpguy jest poprawna, ale myślę, że jest sporo zamieszania w dodatkowych szczegółów tam.

Odpowiedź podstawowy jest w BLOBdomenie typ danych / atrybutu. BLOB jest skrótem duży obiekt binarny i że typ danych kolumny jest specyficzny dla obsługi danych binarnych.

Zobacz odpowiednią stronę podręcznika dla MySQL .

Odpowiedział 01/08/2008 o 13:16
źródło użytkownik

głosy
20

Choć nie powiedział, co masz przechowywania, a może masz świetny powód takiego postępowania, często odpowiedź brzmi „jako odniesienie systemu plików” i rzeczywistych danych jest w systemie plików gdzieś.

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

Odpowiedział 02/08/2008 o 15:57
źródło użytkownik

głosy
9

Powstaje również pytanie, jak uzyskać dane do BLOB. Możesz umieścić dane w instrukcji INSERT IGNORE, jak widać na powyższym przykładzie PHP (choć należy użyć mysql_real_escape_string zamiast addslashes). Jeśli plik istnieje na serwerze bazy danych, można również korzystać z MySQL LOAD_FILE

Odpowiedział 27/08/2008 o 16:13
źródło użytkownik

głosy
13

Chociaż nie powinno być konieczne, można spróbować base64dane kodowania i dekodowania w to. Oznacza to, że będzie po prostu db znaków ASCII. To zajmie trochę więcej miejsca i czasu, ale żadnego problemu zrobić z danych binarnych zostaną wyeliminowane.

Odpowiedział 16/09/2008 o 05:07
źródło użytkownik

głosy
8

Znacznie lepiej realizacja przechowywanie w dostępny tutaj . Będziesz napotkasz problemy z realizacją Floriańska.

Odpowiedział 17/09/2008 o 10:53
źródło użytkownik

głosy
37

Gorąco polecam na przechowywanie danych binarnych w relacyjnej bazie danych. Relacyjnych baz danych są przeznaczone do pracy ze stałym rozmiarze danych; to gdzie ich siła wydajność jest: zapamiętaj starą artykuł Joela , dlaczego bazy danych są tak szybko? ponieważ zajmuje dokładnie 1 wskaźnik przyrostu przejść od rekordu do innego rekordu. Jeśli dodać dane blob nieokreślonej i bardzo różnej wielkości, możesz zepsuć osiągi.

Zamiast tego, przechowywanie plików w systemie plików oraz nazwy sklepu plików w bazie danych.

Odpowiedział 17/09/2008 o 21:37
źródło użytkownik

głosy
16

To zależy od danych, które chcesz zapisać. Powyższy przykład używa LONGBLOBtyp danych, ale należy pamiętać, że istnieją inne binarne formaty danych:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Każdy ma swoje przypadki użycia. Jeśli jest to znany (krótka) długość (np upakowane dane) często razy BINARYlub VARBINARYbędzie działać. Mają dodatkową korzyścią jest możliwość indeks ton na nich.

Odpowiedział 31/12/2010 o 02:04
źródło użytkownik

głosy
10

Jeśli - nie zaleca - pole BLOB istnieje, można zapisać dane w następujący sposób:

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

Pomysł pochodzi z tutaj .

Odpowiedział 12/09/2013 o 13:00
źródło użytkownik

głosy
9

Kiedy trzeba przechowywać dane binarne Zawsze używam VARBINARYformatu, który został wprowadzony byd0nut.

Można znaleźć w dokumentacji na stronie internetowej MySQL pod udokumentowaną temacie 12.4.2 binarnym i typów VARBINARY

Jeśli proszą jakie są advantagese, proszę spojrzeć na pytanie dlaczego-varbinary-zamiast-of-varchar

Odpowiedział 01/05/2014 o 10:37
źródło użytkownik

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