Hogyan kell tárolni bináris adatokat MySQL ?
Bináris adatokat MySQL
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>

A válasz szerint phpguy helyes, de azt hiszem, van egy csomó zavart a további részleteket is.
Az alapvető válasz egy BLOB
adattí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.
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
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
Bár nem feltétlenül szükséges, akkor próbálja meg base64
a 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.
Egy sokkal jobb tárolási végrehajtására rendelkezésre álló itt . Akkor befut kérdéseket Florian végrehajtását.
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.
Ez függ a kívánt adatokat tárolni. A fenti példában a LONGBLOB
adattí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 BINARY
vagy VARBINARY
működni fog. Ezek az előnye, hogy képes ton index rájuk.
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 .
Mikor kell tárolni bináris adatokat mindig használom VARBINARY
formá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