Spec-Zone.ru › MySQL 9.2

13.3.4 Типы BLOB и TEXT

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

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

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

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

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

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

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

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

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

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

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

MySQL Connector/ODBC определяет значения BLOB как `BINARY` и значения TEXT как `CHARACTER`.

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

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

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

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

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

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

Примечание

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

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

Spec-Zone.ru

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