Spec-Zone.ru › MySQL 5.7

11.3.4 Типы BLOB и TEXT

Объект BLOB — это двоиный большой объект, который может хранить переменное количество данных. Четыре типа BLOB — это TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB. Они различаются только максимальной длиной значений, которые могут храниться. Четыре типа TEXT — это TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT. Они соответствуют четырём типам BLOB и имеют одинаковые максимальные длины и требования к хранению. См. Раздел 11.7, «Требования к хранению типов данных».

Значения BLOB обрабатываются как двоичные строки (байтовые строки). У них есть настройка binary и сортировка, сравнение основаны на числовых значениях байтов в значениях столбцов. Значения TEXT обрабатываются как недвоичные строки (строки символов). У них есть кодировка, отличная от binary, и значения сортируются и сравниваются на основе сортировки кодировки набора символов.

Если режим строгого SQL не включен, и вы присваиваете значение столбцу BLOB или TEXT, которое превышает максимальную длину столбца, значение усекается, чтобы уместиться, и генерируется предупреждение. Для усечения не пробельных символов вы можете заставить возникнуть ошибку (вместо предупреждения) и запретить вставку значения, используя режим строгого SQL. См. Раздел 5.1.10, «Режимы SQL сервера».

Усечение избыточных конечных пробелов из значений, которые будут вставлены в столбцы TEXT всегда генерирует предупреждение, независимо от режима SQL.

Для столбцов TEXT и BLOB нет заполнения при вставке и нет удаления байтов при выборке.

Если столбец TEXT индексируется, сравнения элементов индекса заполняются пробелами в конце. Это означает, что если индекс требует уникальных значений, ошибки дублирования ключей возникают для значений, которые отличаются только количеством пробелов в конце. Например, если таблица содержит 'a', попытка сохранить 'a ' приводит к ошибке дублирования ключа. Это не относится к столбцам BLOB.

Во многих отношениях столбец BLOB можно рассматривать как столбец VARBINARY, который может быть сколь угодно большим. Аналогично, столбец TEXT можно рассматривать как столбец VARCHAR. BLOB и TEXT отличаются от VARBINARY и VARCHAR следующим образом:

  • Для индексов на столбцах BLOB и TEXT необходимо указать длину префикса индекса. Для CHAR и VARCHAR длина префикса необязательна. См. Раздел 8.3.4, «Индексы столбцов».

  • Столбцы BLOB и TEXT не могут иметь значения DEFAULT.

Если вы используете атрибут BINARY с типом данных TEXT, столбцу назначается двоичная (_bin) сортировка набора символов столбца.

LONG и LONG VARCHAR отображаются на тип данных MEDIUMTEXT. Это функция совместимости.

MySQL Connector/ODBC определяет значения BLOB как LONGVARBINARY, а значения TEXT как LONGVARCHAR.

Поскольку значения BLOB и TEXT могут быть чрезвычайно длинными, могут возникнуть некоторые ограничения при их использовании:

  • При сортировке используются только первые max_sort_length байтов столбца. Значение по умолчанию для max_sort_length равно 1024. Вы можете сделать больше байтов значимыми при сортировке или группировке, увеличив значение max_sort_length во время запуска или работы сервера. Любой клиент может изменить значение переменной сессии max_sort_length:

    mysql> SET max_sort_length = 2000;
    mysql> SELECT id, comment FROM t
        -> ORDER BY comment;
    
  • Примеры столбцов BLOB или TEXT в результате запроса, обрабатываемого с использованием временной таблицы, заставляют сервер использовать таблицу на диске, а не в памяти, поскольку движок хранения данных MEMORY не поддерживает эти типы данных (см. Раздел 8.4.4, «Использование внутренних временных таблиц в MySQL»). Использование диска влечёт за собой снижение производительности, поэтому включайте столбцы BLOB или TEXT в результат запроса только в том случае, если они действительно необходимы. Например, избегайте использования SELECT *, который выбирает все столбцы.

  • Максимальный размер объекта BLOB или TEXT определяется его типом, но максимальное значение, которое вы фактически можете передать между клиентом и сервером, определяется количеством доступной памяти и размером буферов связи. Вы можете изменить размер буфера сообщений, изменив значение переменной max_allowed_packet, но сделать это необходимо как для сервера, так и для вашей клиентской программы. Например, как mysql, так и mysqldump позволяют изменить значение max_allowed_packet на стороне клиента. См. Раздел 5.1.1, «Настройка сервера», Раздел 4.5.1, «mysql — Клиентская командная строка MySQL» и Раздел 4.5.4, «mysqldump — Программа резервного копирования базы данных». Возможно, вам также следует сравнить размеры пакетов и размер хранимых объектов данных с требованиями к хранению, см. Раздел 11.7, «Требования к хранению типов данных»

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

В некоторых случаях может потребоваться хранить двоичные данные, такие как медиафайлы, в столбцах BLOB или TEXT. Вы можете найти функции обработки строк MySQL полезными для работы с такими данными. См. Раздел 12.8, «Функции и операторы строк». По соображениям безопасности и по другим причинам обычно предпочтительнее делать это с помощью кода приложения, а не предоставлять пользователям приложения привилегии FILE. Вы можете обсудить конкретику для различных языков и платформ на форумах MySQL (http://forums.mysql.com/).

Примечание

Внутри клиента mysql двоичные строки отображаются с использованием шестнадцатеричной нотации в зависимости от значения --binary-as-hex. Для получения дополнительной информации об этом параметре см. Раздел 4.5.1, «mysql — Клиентская командная строка MySQL».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/blob.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API