10 ответов:
ответ phpguy правильный, но я думаю, что есть много путаницы в дополнительных деталях там.
основной ответ находится в
BLOBтип данных / атрибутов домена. BLOB сокращенно для двоичного большого объекта, и этот тип данных столбца специфичен для обработки двоичных данных.посмотреть соответствующая страница руководства для MySQL.
для такой таблицы:
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) );вот пример PHP:
<?php // store.php3 - by Florian Dittmer <[email protected]> // 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>
Я настоятельно рекомендую против хранение двоичных данных в реляционной базе данных. Реляционные базы данных предназначены для работы с данными фиксированного размера; вот где их производительность: помните старая статья Джоэла о том, почему базы данных так быстро? потому что для перехода от одной записи к другой требуется ровно 1 шаг указателя. Если вы добавите данные BLOB неопределенного и сильно изменяющегося размера, вы испортите производительность.
вместо этого хранить файлы в файловая система, и хранить имена файлов в базе данных.
хотя вы не сказали, что вы храните, и у вас может быть отличная причина для этого, часто ответ "как ссылка на файловую систему", и фактические данные находятся где-то в файловой системе.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
это зависит от данных, которые вы желаете сохранить. В приведенном выше примере используется
LONGBLOBтип данных, но вы должны знать, что есть и другие двоичные форматы данных:
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOBVARBINARYBINARYкаждый из них имеет свои варианты использования. Если это известная (короткая) длина (например, упакованные данные) часто раз
BINARYилиVARBINARYбудет работать. Они имеют добавленное преимущество мочь индекс тонны на их.
хотя это не должно быть необходимо, вы можете попробовать
base64кодирование данных и их декодирование. Это означает, что БД будет иметь только символы ascii. Это займет немного больше места и времени, но любая проблема, связанная с двоичными данными, будет устранена.
Если - не рекомендуется - BLOB поле существует, вы можете сохранить данные таким образом:
mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");идея взята из здесь.
кроме того, возникает вопрос, Как получить данные в BLOB. Вы можете поместить данные в инструкцию INSERT, как показано в Примере PHP (хотя вы должны использовать использования mysql_real_escape_string вместо addslashes). Если файл существует на сервере базы данных, вы также можете использовать MySQL LOAD_FILE
когда мне нужно хранить двоичные данные, я всегда использую , а представил
byd0nut.вы можете найти документацию на веб-сайте MySQL в разделе документированные темы 12.4.2 в Binary и varbinary типа
Если вы спрашиваете, Что такое advantagese, пожалуйста, посмотрите на вопрос почему-типа varbinary вместо типа varchar
гораздо лучшая реализация хранения в доступных здесь. Вы столкнетесь с проблемами с реализацией Флориана.
Comments