13.3.1 Синтаксис типа данных строки
Типы данных строк — это CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM и SET.
В некоторых случаях MySQL может изменить столбец строки на тип, отличный от указанного в операторе CREATE
TABLE или ALTER TABLE. См. Раздел 15.1.21.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 9.2 атрибут
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.