Spec-Zone.ru › MariaDB

VARCHAR

Синтаксис

[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

Описание

Строка переменной длины. M представляет максимальную длину столбца в символах. Диапазон значений M составляет от 0 до 65 532. Эффективная максимальная длина VARCHAR зависит от максимального размера строки и используемой кодировки символов. Например, символы utf8 могут занимать до трёх байт на символ, поэтому столбец VARCHAR, использующий кодировку символов utf8, может быть объявлен максимальной длиной в 21 844 символа.

Примечание: Для движка ColumnStore значение M представляет максимальную длину столбца в байтах.

MariaDB хранит значения VARCHAR как префикс длины в один или два байта плюс данные. Префикс длины указывает количество байт в значении. Столбец VARCHAR использует один байт длины, если значения занимают не более 255 байт, и два байта длины, если значения могут занимать более 255 байт.

MariaDB следует спецификации стандарта SQL и не удаляет пробелы в конце значений VARCHAR.

Столбцы VARCHAR(0) могут содержать 2 значения: пустую строку или NULL. Такие столбцы не могут быть частью индекса. Движок хранения CONNECT не поддерживает VARCHAR(0).

VARCHAR является сокращением от CHARACTER VARYING. NATIONAL VARCHAR — это стандартный способ SQL определения того, что столбец VARCHAR должен использовать некоторую предварительно определённую кодировку символов. MariaDB использует utf8 в качестве этой предварительно определённой кодировки, как и MySQL 4.1 и выше. NVARCHAR — это сокращение от NATIONAL VARCHAR.

До MariaDB 10.2 все кодировки MariaDB были типа PADSPACE, что означает, что VARCHAR (а также значения CHAR и TEXT) сравниваются без учёта пробелов в конце. Это не относится к оператору сопоставления с образцом LIKE, который учитывает пробелы в конце. Начиная с MariaDB 10.2, доступно несколько кодировок NO PAD.

Если уникальный индекс состоит из столбца, где символы заполнения в конце отбрасываются или игнорируются, вставки в этот столбец, где значения отличаются только количеством символов заполнения в конце, приведут к ошибке дублирующего ключа.

Примеры

Следующие примеры эквивалентны:

VARCHAR(30) CHARACTER SET utf8
NATIONAL VARCHAR(30)
NVARCHAR(30)
NCHAR VARCHAR(30)
NATIONAL CHARACTER VARYING(30)
NATIONAL CHAR VARYING(30)

Пробелы в конце:

CREATE TABLE strtest (v VARCHAR(10));
INSERT INTO strtest VALUES('Maria   ');

SELECT v='Maria',v='Maria   ' FROM strtest;
+-----------+--------------+
| v='Maria' | v='Maria   ' |
+-----------+--------------+
|         1 |            1 |
+-----------+--------------+

SELECT v LIKE 'Maria',v LIKE 'Maria   ' FROM strtest;
+----------------+-------------------+
| v LIKE 'Maria' | v LIKE 'Maria   ' |
+----------------+-------------------+
|              0 |                 1 |
+----------------+-------------------+

Усечение

  • В зависимости от того, установлен ли строгий режим SQL, при попытке вставки слишком длинной строки в столбец VARCHAR вы получите либо предупреждение, либо ошибку. Если дополнительные символы являются пробелами, пробелы, которые не помещаются, будут удалены, и вы всегда получите предупреждение, независимо от настроек режима SQL.

Разница между VARCHAR и TEXT

  • Столбцы VARCHAR могут быть полностью индексированы. Столбцы TEXT могут быть индексированы только по указанной длине.
  • Использование TEXT или BLOB в запросе SELECT, использующем временные таблицы для хранения промежуточных результатов, заставит временную таблицу использовать дисковое хранилище (используя движок хранения Aria вместо движка памяти memory, что немного медленнее. Это не так плохо, так как движок хранения Aria кэширует строки в памяти. Чтобы получить выгоду от этого, необходимо убедиться, что переменная aria_pagecache_buffer_size достаточно велика, чтобы содержать большую часть данных строк и индексов для временных таблиц.

Режим Oracle

MariaDB начиная с 10.3

В режиме Oracle MariaDB 10.3, VARCHAR2 является синонимом.

Для разработчиков движков хранения

  • Внутри полная длина столбца VARCHAR выделяется внутри каждой записи структуры объекта TABLE record[]. Поскольку таких буферов три, каждая открытая таблица будет выделять в 3 раза больше памяти, необходимой для хранения максимальной длины VARCHAR.
  • Столбцы TEXT и BLOB хранятся с указателем (4 или 8 байта) + длиной 1-4 байта. Данные TEXT хранятся только один раз. Это означает, что внутренне TEXT использует меньше памяти для каждой открытой таблицы, но вместо этого имеет дополнительную нагрузку на то, что каждый объект TEXT должен выделяться и освобождаться для каждого доступа к строке (с некоторым кэшированием между ними).

См. также

  • VARBINARY
  • TEXT
  • CHAR
  • Кодировки символов и сортировки
  • Требования к хранению типов данных
  • Режим Oracle от MariaDB 10.3
Содержимое, воспроизведённое на этом сайте, является собственностью его соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/varchar/

Spec-Zone.ru

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