Двоичные данные в MySQL
Как хранить двоичные данные в MySQL?
9X_database-structure
- @Nevir: Какая информация вам нужна конкретно? Как вы думаете, чего не хватает в [@ phpguy's] (https://stackoverflow ...
Ответ #1
Ответ на вопрос: Двоичные данные в MySQL
Ответ phpguy правильный, но я думаю, что 9X_my-sql в дополнительных деталях есть много путаницы.
Основной 9X_database ответ заключается в BLOB
типе данных/атрибутном 9X_databases домене. BLOB сокращение от Binary Large Object, и 9X_database этот тип данных столбца предназначен для 9X_my-sql обработки двоичных данных.
Ответ #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/
?>
Store binary data into SQL Database
This file has the following Database ID: $id";
mysql_close();
} else {
// else show the form to submit new data:
?>
9X_databases
- Этот код выглядит как 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 храните имена файлов в своей базе данных.
- С другой стороны, хранение данных в 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
Ответ #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 как они могут индексировать их.
Ответ #6
Ответ на вопрос: Двоичные данные в MySQL
Хотя в этом нет необходимости, вы можете 9X_mysql-server попробовать base64
закодировать данные и расшифровать 9X_binary-data их. Это означает, что в БД будут только 9X_database символы ascii. Это займет немного больше 9X_db места и времени, но любая проблема, связанная 9X_data-storage с двоичными данными, будет устранена.
Ответ #7
Ответ на вопрос: Двоичные данные в MySQL
Если поле - not recommended - BLOB существует, вы можете 9X_databases сохранить данные следующим образом:
mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");
Идея 9X_databases взята из here.
Ответ #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.
Ответ #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
-
5
-
4
-
3
-
3
-
3
-
14
-
3
-
11
-
2
-
4
-
2
-
11
-
4
-
8
-
1
-
6
-
8
-
4
-
2
-
1
-
2
-
2
-
5
-
6
-
2
-
3
-
1
-
3
-
2
-
1
-
6
-
1
-
9
-
1
-
7
-
4
-
3
-
2
-
5
-
2
-
2
-
2
-
1
-
1
-
7
-
13
-
11
-
3
-
25
-
24