13.3.1 Синтаксис типа данных строки
Типы данных строки включают CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM и SET.
В некоторых случаях MySQL может изменить столбец строки на тип, отличающийся от заданного в операторе CREATE
TABLE или ALTER TABLE. См. Раздел 15.1.20.7, «Неявные изменения спецификаций столбцов».
Для определения столбцов строковых данных (CHAR, VARCHAR и типов TEXT), MySQL интерпретирует спецификации длины в единицах символов. Для определения столбцов бинарных строковых данных (BINARY, VARBINARY и типов BLOB), MySQL интерпретирует спецификации длины в единицах байтов.
Определения столбцов для типов строковых данных CHAR, VARCHAR, типов TEXT, ENUM, SET (и любых синонимов) могут указывать кодовую страницу и сортировку столбца:
-
CHARACTER SETуказывает кодовую страницу. При необходимости сортировка для кодовой страницы может быть указана атрибутомCOLLATEвместе с любыми другими атрибутами. Например:CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8mb4, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );Это определение таблицы создает столбец с именем
c1, который имеет кодовую страницуutf8mb4с по умолчанию сортировкой для этой кодовой страницы, и столбец с именемc2, который имеет кодовую страницуlatin1и чувствительную к регистру (_cs) сортировку.Правила назначения кодовой страницы и сортировки, когда отсутствует один или оба атрибута
CHARACTER SETиCOLLATE, описаны в Разделе 12.3.5, «Кодовая страница и сортировка столбца».CHARSETявляется синонимом дляCHARACTER SET. -
Указание атрибута
CHARACTER SET binaryдля типа строковых данных приводит к созданию столбца в виде соответствующего бинарного строкового типа:CHARстановитсяBINARY,VARCHARстановитсяVARBINARY, аTEXTстановитсяBLOB. Для типов данныхENUMиSETэто не происходит; они создаются как объявлены. Предположим, что вы указываете таблицу с помощью этого определения:CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );Результирующая таблица имеет это определение:
CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary ); -
Атрибут
BINARY— это нестандартное расширение MySQL, являющееся сокращением для указания бинарной (_bin) сортировки кодовой страницы столбца (или кодовой страницы по умолчанию таблицы, если кодовая страница столбца не указана). В этом случае сравнение и сортировка основаны на числовых значениях кодов символов. Предположим, что вы указываете таблицу с помощью этого определения:CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 BINARY, c2 TEXT BINARY ) CHARACTER SET utf8mb4;
Результирующая таблица имеет это определение:
CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin, c2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ) CHARACTER SET utf8mb4;
В MySQL 8.4 атрибут
BINARYустарел, и вы можете ожидать, что поддержка будет удалена в будущей версии MySQL. Приложения должны быть скорректированы для использования явного атрибута_binсортировки вместо него.Использование
BINARYдля указания типа данных или кодовой страницы остается неизменным. Атрибут
ASCIIявляется сокращением дляCHARACTER SET latin1. Поддерживаемый в более ранних выпусках MySQL,ASCIIустарел; используйтеCHARACTER SETвместо него.Атрибут
UNICODEявляется сокращением дляCHARACTER SET ucs2. Поддерживаемый в более ранних выпусках MySQL,UNICODEустарел; используйтеCHARACTER SETвместо него.
Сравнение и сортировка столбцов символов основаны на сортировке, назначенной столбцу. Для типов данных CHAR, VARCHAR, TEXT, ENUM и SET вы можете объявить столбец с бинарной (_bin) сортировкой или атрибутом BINARY для обеспечения сравнения и сортировки по внутренним кодам символов, а не лексикографического порядка.
Дополнительную информацию об использовании кодовых страниц в MySQL см. в Главе 12, «Кодовые страницы, сортировки, Unicode».
-
[NATIONAL] CHAR[(M)] [CHARACTER SETcharset_name] [COLLATEcollation_name]Строка фиксированной длины, которая всегда справа дополняется пробелами до указанной длины при хранении.
Mпредставляет длину столбца в символах. ДиапазонMсоставляет от 0 до 255. ЕслиMопущено, длина составляет 1.ПримечаниеКонечные пробелы удаляются при извлечении значений
CHAR, за исключением случаев, когда включен режим SQLPAD_CHAR_TO_FULL_LENGTH.CHARявляется сокращением дляCHARACTER.NATIONAL CHAR(или его эквивалентный сокращённый вид,NCHAR) — стандартный способ в SQL определить, что столбецCHARдолжен использовать некоторый предопределённый набор символов. MySQL используетutf8mb3в качестве этого предопределенного набора символов. Раздел 12.3.7, «Национальный набор символов».Тип данных
CHAR BYTEявляется псевдонимом типа данныхBINARY. Это функция совместимости.MySQL позволяет создавать столбец типа
CHAR(0). Это полезно в основном в тех случаях, когда необходимо соответствовать старым приложениям, которые зависят от существования столбца, но фактически не используют его значение.CHAR(0)также полезно, когда требуется столбец, который может принимать только два значения: столбец, определённый какCHAR(0) NULL, занимает всего один бит и может принимать только значенияNULLи''(пустая строка). -
[NATIONAL] VARCHAR(M) [CHARACTER SETcharset_name] [COLLATEcollation_name]Строка переменной длины.
Mпредставляет максимальную длину столбца в символах. ДиапазонMсоставляет от 0 до 65 535. Эффективная максимальная длинаVARCHARзависит от максимального размера строки (65 535 байт, который используется всеми столбцами) и используемого набора символов. Например,utf8mb3символов могут потребовать до трёх байт на символ, поэтому столбецVARCHAR, использующий набор символовutf8mb3, может быть объявлен с максимальной длиной в 21 844 символа. См. Раздел 10.4.7, «Ограничения на количество столбцов таблицы и размер строки».MySQL хранит значения
VARCHARв виде 1-байтового или 2-байтового префикса длины плюс данные. Префикс длины указывает количество байт в значении. СтолбецVARCHARиспользует один байт длины, если значения требуют не более 255 байт, и два байта длины, если значения могут потребовать более 255 байт.ПримечаниеMySQL следует спецификации стандарта SQL и не удаляет конечные пробелы из значений
VARCHAR.VARCHARявляется сокращением дляCHARACTER VARYING.NATIONAL VARCHAR— стандартный способ в SQL определить, что столбецVARCHARдолжен использовать некоторый предопределённый набор символов. MySQL используетutf8mb3в качестве этого предопределённого набора символов. Раздел 12.3.7, «Национальный набор символов».NVARCHARявляется сокращением дляNATIONAL VARCHAR. -
Тип
BINARYаналогичен типуCHAR, но хранит двоичные строковые значения байтов вместо недвоичных строковых значений символов. Необязательная длинаMпредставляет длину столбца в байтах. Если она опущена,Mпо умолчанию равна 1. -
Тип
VARBINARYаналогичен типуVARCHAR, но хранит двоичные строковые значения байтов вместо недвоичных строковых значений символов.Mпредставляет максимальную длину столбца в байтах. -
Столбец
BLOBс максимальной длиной 255 (28 − 1) байт. Каждое значениеTINYBLOBхранится с 1-байтовым префиксом длины, который указывает количество байт в значении. -
TINYTEXT [CHARACTER SETcharset_name] [COLLATEcollation_name]Столбец
TEXTс максимальной длиной 255 (28 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значениеTINYTEXTхранится с 1-байтовым префиксом длины, который указывает количество байт в значении. -
Столбец
BLOBс максимальной длиной 65 535 (216 − 1) байт. Каждое значениеBLOBхранится с 2-байтовым префиксом длины, который указывает количество байт в значении.Для этого типа можно указать необязательную длину
M. Если это сделано, MySQL создает столбец как наименьший типBLOB, достаточно большой для хранения значений длинойMбайт. -
TEXT[(M)] [CHARACTER SETcharset_name] [COLLATEcollation_name]Столбец
TEXTс максимальной длиной 65 535 (216 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значениеTEXTхранится с 2-байтовым префиксом длины, который указывает количество байт в значении.Для этого типа можно указать необязательную длину
M. Если это сделано, MySQL создает столбец как наименьший типTEXT, достаточно большой для хранения значений длинойMсимволов. -
Столбец
BLOBс максимальной длиной 16 777 215 (224 − 1) байт. Каждое значениеMEDIUMBLOBхранится с 3-байтовым префиксом длины, который указывает количество байт в значении. -
MEDIUMTEXT [CHARACTER SETcharset_name] [COLLATEcollation_name]Столбец
TEXTс максимальной длиной 16 777 215 (224 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значениеMEDIUMTEXTхранится с 3-байтовым префиксом длины, который указывает количество байт в значении. -
Столбец
BLOBс максимальной длиной 4 294 967 295 или 4 ГБ (232 − 1) байт. Эффективная максимальная длина столбцовLONGBLOBзависит от настроенного максимального размера пакета в протоколе клиент/сервер и доступной памяти. Каждое значениеLONGBLOBхранится с 4-байтовым префиксом длины, который указывает количество байт в значении.
-
LONGTEXT [CHARACTER SETcharset_name] [COLLATEcollation_name]Столбец
TEXTс максимальной длиной 4 294 967 295 или 4 ГБ (232 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Эффективная максимальная длина столбцовLONGTEXTтакже зависит от настроенного максимального размера пакета в протоколе клиент/сервер и доступной памяти. Каждое значениеLONGTEXTхранится с 4-байтовым префиксом длины, который указывает количество байтов в значении. -
ENUM('value1','value2',...) [CHARACTER SETcharset_name] [COLLATEcollation_name]Перечисление. Строковый объект, который может иметь только одно значение, выбранное из списка значений
',value1'',value2'...,NULLили специального значения ошибки''. ЗначенияENUMвнутренне представляются как целые числа.Столбец
ENUMможет иметь максимум 65 535 различных элементов.Максимальная поддерживаемая длина отдельного элемента
ENUMсоставляетM<= 255 и (Mxw) <= 1020, гдеM— длина литерала элемента, аw— количество байтов, необходимых для символа максимальной длины в наборе символов. -
SET('value1','value2',...) [CHARACTER SETcharset_name] [COLLATEcollation_name]Множество. Строковый объект, который может иметь ноль или более значений, каждое из которых должно быть выбрано из списка значений
',value1'',value2'.... ЗначенияSETвнутренне представляются как целые числа.Столбец
SETможет иметь максимум 64 различных члена.Максимальная поддерживаемая длина отдельного элемента
SETсоставляетM<= 255 и (Mxw) <= 1020, гдеM— длина литерала элемента, аw— количество байтов, необходимых для символа максимальной длины в наборе символов.
© 2025 Oracle
Licensed under the GPLv2 License.