Поиск

Типы BLOB и TEXT

BLOB - это большой двоичный объект, который может содержать данные переменно­го объема. Существуют четыре типа BLOB: TINYBLOB, BLOB, MEDIUMBLOLB и LONGBLOB; они отличаются только максимальной длиной хранимых значений. См. раздел .Требования по хранению типов столбцов
Четыре типа TEXT - TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT - соответствуют четырем типам BLOB и имеют ту же максимальную длину и требования по хранению.
Столбцы BLOB рассматриваются как бинарные строки, в то время как столбцы TEXT рассматриваются в соответствии с назначенными им символьными наборами. До MySQL 4.1 столбца TEXT сортировались и сравнивались на основе порядка сопоставле­ния серверного набора символов.
При сохранении и извлечении никаких преобразований регистра не выполняется.
Если вы присваиваете столбцу BLOB или TEXT значение, превышающее его длину, оно усекается.
Во многих отношениях столбец типа TEXT можно рассматривать как столбец VARCHAR, который может быть настолько большим, насколько это необходимо. И точно так же можно рассматривать столбец типа BLOB, как безразмерный VARCHAR BINARY. Отлича­ются же типы BLOB и TEXT от CHAR и VARCHAR следующим:

  1. Индексы по столбцам BLOB и TEXT введены только в версии MySQL 3.23.2. Более старые версии не поддерживали индексацию по этим столбцам.
  2. При создании индексов по столбцам BLOB и TEXT необходимо указывать длину индексируемого префикса. Для CHAR и VARCHAR длина префикса не обязательна.
  3. При сохранении и извлечении никакого удаления завершающих пробелов из столбцов BLOB и TEXT не выполняется. Это отличает их от столбцов CHAR (завершающие пробелы удаляются при извлечении) и от столбцов VARCHAR (завершающие пробелы удаляются при сохранении).
  4. Столбцы BLOB и TEXT не могут иметь значений DEFAULT.

Начиная с MySQL 4.1.0, типы LONG и LONG VARCHAR отображаются на тип MEDIUMTEXT. Это сделано для совместимости.
Connector/ODBC определяет значения BLOB как LONGVARBINARY, a TEXT - как LONGVARCHAR.
Поскольку значения BLOB и TEXT могут быть чрезвычайно большими, вы можете столкнуться с некоторыми ограничениями при их использовании: Если вы хотите применять конструкции GROUP BY или ORDER BY на столбцах BLOB или TEXT, то должны преобразовать их значения в объекты с фиксированной длиной. Стандартный способ сделать это - воспользоваться функцией SUBSTRING, например:
mysql SELECT comment FROM имя__таблицы,SUBSTRING(comment,20) AS substr - ORDER BY substr;
Если этого не сделать, для сортировки будет использовано только max_sort_length байт. Значение по умолчанию max_sort_length равно 1024; его можно изменить с помощью опции --max-sort-length при запуске сервера mysqld. Группировать выражения, включающие значения blob и TEXT, можно, используя псевдонимы или номера позиций столбцов:
mysql SELECT id,SUBSTRING(столбец_ЫоЪ, 1,100) AS b
- FROM имя_таблицы GROUP BY b; mysql SELECT id,SUBSTRING(столбец_ЫоЬ, 1,100)
- FROM имя_таблицы GROUP BY 2;

  • Максимальный размер объекта BLOB или TEXT определяется его типом, но фактическое наибольшее значение, которое можно передавать между клиентом и сервером, определяется объемом доступной памяти и размером коммуникационных буферов. Вы можете изменить размер буфера сообщений, изменяя значение переменной max_allowed_packet, но это нужно сделать как на стороне клиента, так и на стороне сервера. Так, например, и mysql, и mysqldump позволяют изменять значение переменной max_allowed_packet.
Каждое значение BLOB или text имеет внутреннее представление в виде отдельно распределенного объекта. Это отличает их от других типов столбцов, для которых ре­сурсы хранения выделяются при открытии таблицы по одному разу на столбец.