Тип данных BLOB представляет собой двоичный объект большого размера,
который может содержать переменное количество данных. Существуют 4
модификации этого типа - TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB,
отличающиеся только максимальной длиной хранимых величин.
See Раздел 6.2.6, «Требования к памяти для различных типов столбцов».
Тип данных TEXT также имеет 4 модификации - TINYTEXT, TEXT, MEDIUMTEXT и
LONGTEXT, соответствующие упомянутым четырем типам BLOB и имеющие те же
максимальную длину и требования к объему памяти. Единственное различие
между типами BLOB и TEXT состоит в том, что сортировка и сравнение данных
выполняются с учетом регистра для величин BLOB и без учета регистра для
величин TEXT. Другими словами, TEXT - это независимый от регистра BLOB.
Если размер задаваемого в столбце BLOB или TEXT значения превосходит
максимально допустимую длину столбца, то это значение соответствующим
образом усекается.
В большинстве случаев столбец TEXT может рассматриваться как столбец
VARCHAR неограниченного размера. И, аналогично, BLOB - как столбец типа
VARCHAR BINARY. Различия при этом следующие:
Столбцы типов
BLOBиTEXTмогут индексироваться в версии MySQL 3.23.2 и более новых. Более старые версии MySQL не поддерживают индексацию этих столбцов.-
В столбцах типов
BLOBиTEXTне производится удаление концевых символов, как это делается для столбцов типаVARCHAR. Для столбцов
BLOBиTEXTне может быть задан атрибутDEFAULT- значения величин по умолчанию.
В MyODBC величины типа BLOB определяются как LONGVARBINARY и величины типа
TEXT - как LONGVARCHAR.
Так как величины типов BLOB и TEXT могут быть чрезмерно большими, при их
использовании целесообразно предусмотреть некоторые ограничения:
Чтобы обеспечить возможность использования команд GROUP BY или ORDER BY в столбце типа BLOB или TEXT, необходимо преобразовать значение
столбца в объект с фиксированной длиной. Обычно это делается с помощью
функции SUBSTRING. Например:
mysql> SELECT comment FROM tbl_name,SUBSTRING(comment,20) AS substr
-> ORDER BY substr;
Если этого не сделать, то операция сортировки в столбце будет выполнена
только для первых байтов, количество которых задается параметром
max_sort_length. Значение по умолчанию величины max_sort_length равно
1024; это значение можно изменить, используя параметр -O сервера mysqld
при его запуске. Группировка выражения, включающего в себя величины BLOB
или TEXT, возможна при указании позиции столбца или использовании
псевдонима:
mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM tbl_name GROUP BY 2; mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM tbl_name GROUP BY b;
Максимальный размер объекта типа
BLOBилиTEXTопределяется его типом, но наибольшее значение, которое фактически может быть передано между клиентом и сервером, ограничено величиной доступной памяти и размером буферов связи. Можно изменить размер буфера блока передачи, но сделать это необходимо как на стороне сервера, так и на стороне клиента. See Раздел 5.5.2, «Настройка параметров сервера».
Следует учитывать, что внутренним представлением любой величины типа BLOB
или TEXT является отдельно размещенный объект - в противоположность всем
остальным типам столбцов, для которых память выделяется единовременно для
столбца при открытии таблицы.