Текст
Синтаксис
TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
Описание
Столбец типа TEXT с максимальной длиной 65,535 (216 - 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значение TEXT хранится с помощью префикса длиной два байта, указывающего количество байтов в значении. Если вам нужен больший объем памяти, рассмотрите использование MEDIUMTEXT вместо этого.
Для этого типа можно указать необязательную длину M. Если это сделано, MariaDB создаёт столбец как самый маленький тип TEXT, достаточно большой для хранения значений длиной M символов.
До MariaDB 10.2 все сортировки MariaDB были типа PADSPACE, что означало, что TEXT (а также значения VARCHAR и CHAR) сравниваются без учёта пробелов в конце. Это не относится к оператору поиска по шаблонам LIKE, который учитывает пробелы в конце.
До MariaDB 10.2.1, столбцы типа BLOB и TEXT не могли быть назначены значение по умолчанию. Это ограничение было снято в MariaDB 10.2.1.
Примеры
Пробелы в конце:
CREATE TABLE strtest (d TEXT(10));
INSERT INTO strtest VALUES('Maria ');
SELECT d='Maria',d='Maria ' FROM strtest;
+-----------+--------------+
| d='Maria' | d='Maria ' |
+-----------+--------------+
| 1 | 1 |
+-----------+--------------+
SELECT d LIKE 'Maria',d LIKE 'Maria ' FROM strtest;
+----------------+-------------------+
| d LIKE 'Maria' | d LIKE 'Maria ' |
+----------------+-------------------+
| 0 | 1 |
+----------------+-------------------+
Индексирование
Столбцы типа TEXT могут быть проиндексированы только по указанной длине. Это означает, что они не могут быть использованы в качестве первичного ключа таблицы до MariaDB 10.4, и не может быть создан уникальный индекс на них.
Начиная с MariaDB 10.4, можно создать уникальный индекс на столбце TEXT.
Внутренне это использует индексирование хэша для быстрого проверки значений, а если обнаружено столкновение хэшей, то фактические хранимые значения сравниваются, чтобы сохранить уникальность.
Различия между VARCHAR и TEXT
- VARCHAR столбцы могут быть полностью проиндексированы. Столбцы типа
TEXTмогут быть проиндексированы только по указанной длине. - Использование TEXT или BLOB в запросе SELECT, который использует временные таблицы для хранения промежуточных результатов, заставит временную таблицу использовать дисковое хранилище (используя движок хранения Aria вместо памяти, что немного медленнее. Это не так плохо, так как движок хранения Aria кеширует строки в памяти. Для получения выгоды от этого, необходимо убедиться, что переменная aria_pagecache_buffer_size достаточно большая, чтобы содержать большую часть данных строк и индексов для временных таблиц.
Для разработчиков движков хранения
- Внутренне вся длина столбца VARCHAR выделяется внутри структуры записи record[] каждого объекта TABLE. Поскольку таких буферов три, каждая открытая таблица выделит в 3 раза больше памяти, чем максимальная длина для хранения VARCHAR.
- Столбцы типа
TEXTиBLOBхранятся со указателем (4 или 8 байт) + длиной 1-4 байта. Данные типаTEXTхранятся только один раз. Это означает, что внутреннеTEXTиспользует меньше памяти для каждой открытой таблицы, но вместо этого имеет дополнительную нагрузку, что каждый объектTEXTдолжен быть выделен и освобождён для каждого доступа к строке (с некоторым кэшированием между ними).
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/text/