Подтвердить что ты не робот

Varbinary vs Blob в MySQL

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

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

Спасибо!

4b9b3361

Ответ 1

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

BLOB привязан к 65kB.

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

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

Ответ 2

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

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

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

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

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

Ответ 3

Одно существенное различие заключается в том, что типы blob хранятся во вторичном хранилище, а varbinaries хранятся inline в строке так же, как varchars и другие "простые" типы.

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

Ответ 4

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

Ответ 5

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

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