Varbinary против Blob в MySQL - PullRequest
       20

Varbinary против Blob в MySQL

23 голосов
/ 12 декабря 2011

У меня есть около 2 тыс. Необработанных двоичных данных, которые мне нужно сохранить в таблице, но я не знаю, выбрать ли тип Varbinary или Blob.Я прочитал описания в документации по MySQL, но не нашел ни одного контракта и сравнил описания.Я также читал, что varbinary поддерживает только до 255 символов, но я успешно создал поле varbinary (2048), поэтому я немного запутался.

Двоичные данные не нужно индексировать, и я не будунужно запросить его.Есть ли преимущество использования одного типа над другим из PHP?

Спасибо!

Ответы [ 5 ]

18 голосов
/ 12 декабря 2011

VARBINARY связан с 255 байтами в MySQL 5.0.2 и ниже, до 65 КБ в 5.0.3 и выше.

BLOB привязано к 65 КБ.

В конечном итоге, VARBINARY практически совпадает с BLOB (с точки зрения того, что в нем может храниться), если только вы не хотите сохранить совместимость со «старыми» версиями MySQL. Документация MySQL гласит:

В большинстве случаев вы можете рассматривать столбец BLOB как столбец VARBINARY, который может быть настолько большим, насколько вам нужно.

14 голосов
/ 23 мая 2012

На самом деле blob может быть больше (есть крошечный, блоб, mediumblob и longblob http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html) с ограничением размера до 2 ^ 32 -1.

Кроме того, хранилище BLOB-объектов растет "снаружи"строка, в то время как максимальный размер varbinary связан с количеством доступного свободного размера строки (таким образом, он может фактически быть меньше чем 64 КБ).

Есть некоторые незначительные различия между обоими

1) С помощью сценариев индекса (для blob требуется размер префикса для индексов, для varbinary нет) http: /en/column-indexes.html
тест CREATE TABLE (blob_col BLOB, INDEX (blob_col (10)));

2) Как уже упоминалось, существуют разные проблемы с пробелами в varbinary & blob в MySql 5.0.x или более ранних версиях: http: ///en/blob.html http: ///en/binary-varbinary.html

(усечение ссылок, поскольку stackoverflow считает, что слишком много ссылок является спамом)

11 голосов
/ 08 августа 2012

Одно существенное различие заключается в том, что типы BLOB-объектов хранятся во вторичном хранилище, тогда как varbinaries хранятся в строке в строке так же, как varchars и другие «простые» типы.

Это может повлиять на производительность в загруженной системе, где дополнительный поиск для извлечения и обработки данных большого двоичного объекта может быть дорогостоящим.

5 голосов
/ 07 июня 2013

Стоит отметить, что механизм хранения памяти не поддерживает BLOB / TEXT, но работает с VARBINARY.

0 голосов
/ 30 марта 2013

Я просто смотрю на тестовое приложение, которое хранит около 5 тыс. Двоичных данных в столбце. Первоначально он использовал varbinary, но так как он очень медленный, я решил попробовать blob. Ну, я смотрю на скорость записи на диск поверх и не вижу никакой разницы.

Единственное существенное отличие, которое я прочитал в руководстве по mysql, заключается в том, что движок памяти не поддерживает BLOB-объекты, поэтому любые временные таблицы, создаваемые с помощью запросов (смотрите, когда mysql использует временные таблицы ), будут создаваться на диске и это намного медленнее. Так что лучше ставить на varbinary / binary, если он достаточно короткий, чтобы поместиться в строку (на данный момент всего 64 тыс. Для всех столбцов).

...