Как хранить двоичные данные в MySQL ?
mysql
database
binary-data
data-storage
Джефф Далгас
источник
источник
Ответы:
Ответ phpguy правильный, но я думаю, что в дополнительных деталях много путаницы.
Основной ответ находится в
BLOB
типе данных / области атрибута. BLOB - сокращение от Binary Large Object, и этот тип данных столбца специфичен для обработки двоичных данных.Смотрите соответствующую страницу руководства для MySQL .
источник
Для такой таблицы:
Вот пример PHP:
источник
Я настоятельно рекомендую против хранения двоичных данных в реляционной базе данных. Реляционные базы данных предназначены для работы с данными фиксированного размера; вот в чем заключается их производительность: помните старую статью Джоэла о том, почему базы данных такие быстрые? потому что для перехода от записи к другой записи требуется ровно 1 приращение указателя. Если вы добавите BLOB-данные неопределенного и сильно различающегося размера, вы снизите производительность.
Вместо этого храните файлы в файловой системе и сохраняйте имена файлов в своей базе данных.
источник
Хотя вы не сказали, что храните, и у вас может быть на то веская причина, часто ответом является «ссылка на файловую систему», а фактические данные находятся где-то в файловой системе.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
источник
Это зависит от данных, которые вы хотите сохранить. В приведенном выше примере используется
LONGBLOB
тип данных, но вы должны знать, что существуют другие двоичные форматы данных:TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
У каждого есть свои варианты использования. Если это известная (короткая) длина (например, упакованные данные), часто время
BINARY
илиVARBINARY
будет работать. У них есть дополнительное преимущество в том, что они могут указывать на них.источник
Хотя в этом нет необходимости, вы можете попробовать
base64
закодировать данные и расшифровать их. Это означает, что в БД будут только символы ascii. Это займет немного больше места и времени, но любая проблема, связанная с двоичными данными, будет устранена.источник
Если поле BLOB - не рекомендуется - вы можете сохранить данные следующим образом:
Идея взята отсюда .
источник
Также возникает вопрос, как получить данные в BLOB. Вы можете поместить данные в оператор INSERT, как показывает пример PHP (хотя вы должны использовать mysql_real_escape_string вместо addlashes ). Если файл существует на сервере базы данных, вы также можете использовать MySQL LOAD_FILE
источник
Когда мне нужно хранить двоичные данные, я всегда использую
VARBINARY
формат, как было представленоbyd0nut
.Документацию можно найти на веб-сайте MySQL в документированной теме 12.4.2. Типы BINARY и VARBINARY.
Если вы спрашиваете, какие преимущества, пожалуйста, посмотрите на вопрос, почему-varbinary-Вместо-VARCHAR
источник