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.