Spec-Zone.ru › MySQL 9.2

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 SET charset_name] [COLLATE collation_name]

    Строка фиксированной длины, которая всегда справа дополняется пробелами до указанной длины при хранении. M представляет длину столбца в символах. Диапазон M составляет от 0 до 255. Если M опущено, длина составляет 1.

    Примечание

    Конечные пробелы удаляются при извлечении значений CHAR, за исключением случаев, когда включен режим SQL PAD_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 SET charset_name] [COLLATE collation_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[(M)]

    Тип BINARY аналогичен типу CHAR, но хранит двоичные строковые значения байтов вместо недвоичных строковых значений символов. Необязательная длина M представляет длину столбца в байтах. Если она опущена, M по умолчанию равна 1.

  • VARBINARY(M)

    Тип VARBINARY аналогичен типу VARCHAR, но хранит двоичные строковые значения байтов вместо недвоичных строковых значений символов. M представляет максимальную длину столбца в байтах.

  • TINYBLOB

    Столбец BLOB с максимальной длиной 255 (28 − 1) байт. Каждое значение TINYBLOB хранится с 1-байтовым префиксом длины, который указывает количество байт в значении.

  • TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    Столбец TEXT с максимальной длиной 255 (28 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значение TINYTEXT хранится с 1-байтовым префиксом длины, который указывает количество байт в значении.

  • BLOB[(M)]

    Столбец BLOB с максимальной длиной 65 535 (216 − 1) байт. Каждое значение BLOB хранится с 2-байтовым префиксом длины, который указывает количество байт в значении.

    Для этого типа можно указать необязательную длину M. Если это сделано, MySQL создает столбец как наименьший тип BLOB, достаточно большой для хранения значений длиной M байт.

  • TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

    Столбец TEXT с максимальной длиной 65 535 (216 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значение TEXT хранится с 2-байтовым префиксом длины, который указывает количество байт в значении.

    Для этого типа можно указать необязательную длину M. Если это сделано, MySQL создает столбец как наименьший тип TEXT, достаточно большой для хранения значений длиной M символов.

  • MEDIUMBLOB

    Столбец BLOB с максимальной длиной 16 777 215 (224 − 1) байт. Каждое значение MEDIUMBLOB хранится с 3-байтовым префиксом длины, который указывает количество байт в значении.

  • MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    Столбец TEXT с максимальной длиной 16 777 215 (224 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Каждое значение MEDIUMTEXT хранится с 3-байтовым префиксом длины, который указывает количество байт в значении.

  • LONGBLOB

    Столбец BLOB с максимальной длиной 4 294 967 295 или 4 ГБ (232 − 1) байт. Эффективная максимальная длина столбцов LONGBLOB зависит от настроенного максимального размера пакета в протоколе клиент/сервер и доступной памяти. Каждое значение LONGBLOB хранится с 4-байтовым префиксом длины, который указывает количество байт в значении.

  • LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    Столбец типа TEXT с максимальной длиной 4 294 967 295 или 4 ГБ (232 − 1) символов. Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Эффективная максимальная длина столбцов LONGTEXT также зависит от настроенного максимального размера пакета в протоколе клиент/сервер и доступной памяти. Каждое значение LONGTEXT хранится с 4-байтовым префиксом длины, который указывает количество байтов в значении.

  • ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    Перечисление. Строковый объект, который может иметь только одно значение, выбранное из списка значений 'value1', 'value2', ..., NULL или специального значения ошибки ''. Значения ENUM представляются во внутреннем виде как целые числа.

    Столбец типа ENUM может иметь максимум 65 535 различных элементов.

    Максимальная поддерживаемая длина отдельного элемента ENUM составляет M <= 255 и (M x w) <= 1020, где M — длина литерала элемента, а w — количество байтов, необходимых для символа максимальной длины в наборе символов.

  • SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    Множество. Строковый объект, который может иметь ноль или более значений, каждое из которых должно быть выбрано из списка значений 'value1', 'value2', .... Значения SET представляются во внутреннем виде как целые числа.

    Столбец типа SET может иметь максимум 64 различных элемента.

    Максимальная поддерживаемая длина отдельного элемента SET составляет M <= 255 и (M x w) <= 1020, где M — длина литерала элемента, а w — количество байтов, необходимых для символа максимальной длины в наборе символов.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/string-type-syntax.html

Spec-Zone.ru

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