Двоичные данные в MySQL

Как хранить двоичные данные в MySQL?

9X_database-structure

197
2

  • @Nevir: Какая информация вам нужна конкретно? Как вы думаете, чего не хватает в [@ phpguy's] (https://stackoverflow ...
9
Общее количество ответов: 9

Ответ #1

Ответ на вопрос: Двоичные данные в MySQL

Ответ phpguy правильный, но я думаю, что 9X_my-sql в дополнительных деталях есть много путаницы.

Основной 9X_database ответ заключается в BLOB типе данных/атрибутном 9X_databases домене. BLOB сокращение от Binary Large Object, и 9X_database этот тип данных столбца предназначен для 9X_my-sql обработки двоичных данных.

См. the relevant manual page for MySQL.

143
0

Ответ #2

Ответ на вопрос: Двоичные данные в 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:


    // Example php script to demonstrate the storing of binary files into
    // an sql database. More information can be found at http://www.phpbuilder.com/
?> 
 
This file has the following Database ID: $id"; mysql_close(); } else { // else show the form to submit new data: ?>
File Description:

File to upload/store in database:

9X_databases

59
2

  • Этот код выглядит как PHP3 (или, может быть, 4), в котором включен register_globals. Вы не хотите запускать этот код, и он также не будет ра ...

Ответ #3

Ответ на вопрос: Двоичные данные в MySQL

Я настоятельно рекомендую против хранения двоичных 9X_mysqlsh данных в реляционной базе данных. Реляционные 9X_data-storage базы данных предназначены для работы с данными 9X_dbms фиксированного размера; вот где их сила 9X_database производительности: помните Joel's old article о том, почему 9X_data-storage базы данных такие быстрые? потому что для 9X_mysqldump перехода от записи к другой записи требуется 9X_database-structure ровно 1 приращение указателя. Если вы добавите 9X_dbms BLOB-данные неопределенного и сильно различающегося 9X_mysqldump размера, вы снизите производительность.

Вместо 9X_mysql-table этого храните файлы в файловой системе и 9X_mysqld храните имена файлов в своей базе данных.

43
6

  • С другой стороны, хранение данных в db не зависит от ОС, что может быть удобно для странных имен файлов. db может хранить несколько файлов с одним и тем же именем, ...

Ответ #4

Ответ на вопрос: Двоичные данные в MySQL

Хотя вы не сказали, что вы храните, и у 9X_binary-data вас может быть веская причина для этого, часто 9X_database ответ будет «как ссылка на файловую систему», а 9X_mysql фактические данные находятся где-то в файловой 9X_mysqldump системе.

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

23
0

Ответ #5

Ответ на вопрос: Двоичные данные в MySQL

Это зависит от данных, которые вы хотите 9X_mysql-server сохранить. В приведенном выше примере используется 9X_database-structure тип данных LONGBLOB, но вы должны знать, что существуют 9X_binary-data и другие типы двоичных данных:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

У каждого 9X_db свои варианты использования. Если это известная 9X_mysqlsh (короткая) длина (например, упакованные 9X_mysqld данные), BINARY или VARBINARY будут работать большую часть 9X_binary-data времени. У них есть дополнительное преимущество, так 9X_mysqld как они могут индексировать их.

18
0

Ответ #6

Ответ на вопрос: Двоичные данные в MySQL

Хотя в этом нет необходимости, вы можете 9X_mysql-server попробовать base64 закодировать данные и расшифровать 9X_binary-data их. Это означает, что в БД будут только 9X_database символы ascii. Это займет немного больше 9X_db места и времени, но любая проблема, связанная 9X_data-storage с двоичными данными, будет устранена.

15
0

Ответ #7

Ответ на вопрос: Двоичные данные в MySQL

Если поле - not recommended - BLOB существует, вы можете 9X_databases сохранить данные следующим образом:

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

Идея 9X_databases взята из here.

12
0

Ответ #8

Ответ на вопрос: Двоичные данные в MySQL

Когда мне нужно хранить двоичные данные, я 9X_database всегда использую формат VARBINARY, представленный 9X_my-sql d0nut в одном из предыдущих ответов.

Вы можете 9X_mysql-server найти документацию на веб-сайте MySQL в 9X_mysqld задокументированной теме: 12.4.2 The BINARY and VARBINARY Types.

Если вы спрашиваете, в 9X_my-sql чем заключаются преимущества, прочтите вопрос: why-varbinary-instead-of-varchar.

12
0

Ответ #9

Ответ на вопрос: Двоичные данные в MySQL

Также возникает вопрос, как получить данные 9X_my-sql в BLOB. Вы можете поместить данные в оператор 9X_database INSERT, как показано в примере PHP (хотя 9X_my-sql вы должны использовать mysql_real_escape_string вместо добавления 9X_mysqlclient косых черт). Если файл существует на сервере 9X_mysql-table базы данных, вы также можете использовать 9X_data-storage MySQL LOAD_FILE

11
0