11.3.1 Синтаксис типа данных String
Типы данных string включают CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM и SET.
В некоторых случаях MySQL может изменить тип столбца string на тип, отличный от указанного в операторе CREATE
TABLE или ALTER TABLE. См. Раздел 13.1.18.6, «Неявные изменения спецификаций столбцов».
При определении столбцов строкового типа (CHAR, VARCHAR и типы TEXT), MySQL интерпретирует спецификации длины в единицах символов. Для определения столбцов бинарного строкового типа (BINARY, VARBINARY и типы BLOB), MySQL интерпретирует спецификации длины в байтах.
Определения столбцов для строковых типов данных CHAR, VARCHAR, типы TEXT, ENUM, SET (и любые синонимы) могут указывать кодовую страницу и правила сопоставления столбца:
-
CHARACTER SETзадаёт кодовую страницу. При необходимости, правила сопоставления для кодовой страницы можно указать с помощью атрибутаCOLLATE, вместе с другими атрибутами. Например:CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );Это определение таблицы создаёт столбец с именем
c1, имеющий кодовую страницуutf8с кодом сопоставления по умолчанию, и столбец с именемc2, имеющий кодовую страницуlatin1и чувствительный к регистру (_cs) код сопоставления.Правила присвоения кодовой страницы и правил сопоставления, когда отсутствует либо атрибут
CHARACTER SET, либо атрибутCOLLATE, описаны в Разделе 10.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;
Атрибут
ASCII— это сокращение дляCHARACTER SET latin1.Атрибут
UNICODE— это сокращение дляCHARACTER SET ucs2.
Сравнение и сортировка символьных столбцов основаны на правилах сопоставления, назначенных столбцу. Для типов данных CHAR, VARCHAR, TEXT, ENUM и SET, вы можете объявить столбец с бинарным (_bin) кодом сопоставления или атрибутом BINARY, чтобы сравнение и сортировка использовали основополагающие значения кода символов, а не лексикографический порядок.
Дополнительную информацию об использовании кодовых страниц в MySQL см. в Главе 10, «Кодовые страницы, правила сопоставления, Unicode».
-
[NATIONAL] CHAR[(M)] [CHARACTER SETcharset_name] [COLLATEcollation_name]Строка фиксированной длины, которая всегда дополняется пробелами справа до указанной длины при хранении.
Mпредставляет длину столбца в символах. Диапазон значенийMсоставляет от 0 до 255. ЕслиMопущено, длина равна 1.ПримечаниеКонечные пробелы удаляются при получении значений
CHAR, если не включен SQL-режимPAD_CHAR_TO_FULL_LENGTH.CHAR— сокращение дляCHARACTER.NATIONAL CHAR(или его сокращённая формаNCHAR) — стандартный способ в SQL определить, что столбецCHARдолжен использовать какой-то предопределенный набор символов. MySQL используетutf8в качестве этого предопределенного набора символов. Раздел 10.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 байт, который делится между всеми столбцами) и используемого набора символов. Например,utf8символа могут потребовать до трёх байт на символ, поэтому столбецVARCHARс использованием набора символовutf8может быть объявлен с максимальной длиной в 21 844 символа. См. Раздел 8.4.7, «Ограничения на количество столбцов таблицы и размер строки».MySQL хранит значения
VARCHARкак префикс длины в 1 или 2 байта плюс данные. Префикс длины указывает количество байтов в значении. СтолбецVARCHARиспользует один байт длины, если значения требуют не более 255 байтов, два байта длины, если значения могут потребовать более 255 байтов.ПримечаниеMySQL следует спецификации стандартного SQL и не удаляет конечные пробелы из значений
VARCHAR.VARCHAR— сокращение дляCHARACTER VARYING.NATIONAL VARCHAR— стандартный способ в SQL определить, что столбецVARCHARдолжен использовать какой-то предопределенный набор символов. MySQL используетutf8в качестве этого предопределенного набора символов. Раздел 10.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 (232 − 1) байт или 4 ГБ. Эффективная максимальная длина столбцов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 различных элементов. (Практический предел меньше 3000.) Таблица может иметь не более 255 уникальных списков элементов среди её столбцов типовENUMиSET, рассматриваемых как группа. Более подробная информация о этих ограничениях доступна в Ограничения, накладываемые структурой файла .frm. -
SET('value1','value2',...) [CHARACTER SETcharset_name] [COLLATEcollation_name]Множество. Объект строкового типа, который может иметь ноль или более значений, каждое из которых должно быть выбрано из списка значений
',value1'',value2'.... ЗначенияSETвнутренне представлены в виде целых чисел.Столбец типа
SETможет иметь максимум 64 различных члена. Таблица может иметь не более 255 уникальных списков элементов среди её столбцов типовENUMиSET, рассматриваемых как группа. Более подробная информация об этом ограничении доступна в Ограничения, накладываемые структурой файла .frm.
© 2025 Oracle
Licensed under the GPLv2 License.