Yanıtlar:
Phpguy tarafından cevap doğru ama orada ek ayrıntılar çok karışıklık olduğunu düşünüyorum.
Temel cevap bir BLOB
veri tipi / özellik alanındadır. BLOB , İkili Büyük kısaltmasıdır ve bu sütun veri türü, ikili verilerin işlenmesine özgüdür.
MySQL için ilgili kılavuz sayfasına bakınız .
Bunun gibi bir tablo için:
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)
);
İşte bir PHP örneği:
<?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>
Şiddetle tavsiye karşı bir ilişkisel veritabanı ikili veri depolamak. İlişkisel veritabanları sabit boyutlu verilerle çalışmak üzere tasarlanmıştır; performans güçlerinin olduğu yer: Joel'in veritabanlarının neden bu kadar hızlı olduğuna dair eski makalesini hatırlayın ? çünkü bir kayıttan başka bir kayda geçmek tam olarak 1 işaretçi artışı gerektirir. Tanımsız ve büyük ölçüde değişen boyutta BLOB verileri eklerseniz, performansı düşürürsünüz.
Bunun yerine, dosyaları dosya sisteminde depolayın ve dosya adlarını veritabanınızda saklayın.
Ne sakladığınızı söylememiş olsanız da, bunu yapmak için harika bir nedeniniz olabilir, ancak genellikle yanıt 'dosya sistemi referansı olarak' ve gerçek veriler bir yerde dosya sisteminde.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
Saklamak istediğiniz verilere bağlıdır. Yukarıdaki örnek LONGBLOB
veri türünü kullanır , ancak başka ikili veri formatları olduğunu bilmeniz gerekir:
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
Her birinin kullanım durumları vardır. Bilinen (kısa) bir uzunluk (örneğin paketlenmiş veri) ise sık sık BINARY
veya VARBINARY
çalışır. Onlar üzerinde ton endeksi olma avantajı var.
Soru ayrıca verilerin BLOB'a nasıl girileceğidir. PHP örneğinin gösterdiği gibi bir INSERT deyimine veri koyabilirsiniz (her ne kadar addslashes yerine mysql_real_escape_string kullanmalısınız). Dosya veritabanı sunucusunda varsa, MySQL'in LOAD_FILE dosyasını da kullanabilirsiniz
İkili verileri depolamamız gerektiğinde, her zaman VARBINARY
tanıtıldığı gibi biçimi kullanırımbyd0nut
.
Belgeleri MySQL web sitesinde belgelenmiş başlık altında bulabilirsiniz. 12.4.2 BINARY ve VARBINARY Türlerinin
Avantajların ne olduğunu soruyorsanız, lütfen varchar yerine neden varbinary sorusuna bakın.