6.2.3.2 Типы данных BLOB
и TEXT
Тип данных BLOB
представляет собой двоичный объект большого размера,
который может содержать переменное количество данных. Существуют 4
модификации этого типа - TINYBLOB
, BLOB
, MEDIUMBLOB
и LONGBLOB
,
отличающиеся только максимальной длиной хранимых величин.
See section 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 section 5.5.2 Настройка параметров сервера.
Следует учитывать, что внутренним представлением любой величины типа BLOB
или TEXT
является отдельно размещенный объект - в противоположность всем
остальным типам столбцов, для которых память выделяется единовременно для
столбца при открытии таблицы.