Spec-Zone.ru › MySQL 8.4

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 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-8.4-en/string-type-syntax.html

Spec-Zone.ru

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