Spec-Zone.ru › MySQL 5.7

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 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 использует utf8 в качестве этого предопределенного набора символов. Раздел 10.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 байт, который делится между всеми столбцами) и используемого набора символов. Например, 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[(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 (232 − 1) байт или 4 ГБ. Эффективная максимальная длина столбцов 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 различных элементов. (Практический предел меньше 3000.) Таблица может иметь не более 255 уникальных списков элементов среди её столбцов типов ENUM и SET, рассматриваемых как группа. Более подробная информация о этих ограничениях доступна в Ограничения, накладываемые структурой файла .frm.

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

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

    Столбец типа SET может иметь максимум 64 различных члена. Таблица может иметь не более 255 уникальных списков элементов среди её столбцов типов ENUM и SET, рассматриваемых как группа. Более подробная информация об этом ограничении доступна в Ограничения, накладываемые структурой файла .frm.

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

Spec-Zone.ru

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