Spec-Zone.ru › MySQL 9.2

12.3.5 Набор символов и сортировка столбцов

Каждый столбец “символов” (то есть столбец типа CHAR, VARCHAR, типа TEXT или любого синонима) имеет набор символов и сортировку столбца. Синтаксис определения столбца для CREATE TABLE и ALTER TABLE содержит необязательные предложения для указания набора символов и сортировки столбца:

col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

Эти предложения также могут быть использованы для столбцов типа ENUM и SET:

col_name {ENUM | SET} (val_list)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

Примеры:

CREATE TABLE t1
(
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_german1_ci
);

ALTER TABLE t1 MODIFY
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;

MySQL выбирает набор символов и сортировку столбца следующим образом:

  • Если указаны и CHARACTER SET charset_name, и COLLATE collation_name, используется набор символов charset_name и сортировка collation_name.

    CREATE TABLE t1
    (
        col1 CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    Набор символов и сортировка указаны для столбца, поэтому они используются. Столбец имеет набор символов utf8mb4 и сортировку utf8mb4_unicode_ci.

  • Если указан CHARACTER SET charset_name без COLLATE, используется набор символов charset_name и его по умолчанию сортировка.

    CREATE TABLE t1
    (
        col1 CHAR(10) CHARACTER SET utf8mb4
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    Набор символов указан для столбца, но сортировка нет. Столбец имеет набор символов utf8mb4 и сортировку по умолчанию для utf8mb4, которая равна utf8mb4_0900_ai_ci. Чтобы увидеть сортировку по умолчанию для каждого набора символов, используйте оператор SHOW CHARACTER SET или запросите таблицу INFORMATION_SCHEMA CHARACTER_SETS.

  • Если указана COLLATE collation_name без CHARACTER SET, используется набор символов, связанный с collation_name, и сортировка collation_name.

    CREATE TABLE t1
    (
        col1 CHAR(10) COLLATE utf8mb4_polish_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    Сортировка указана для столбца, но набор символов нет. Столбец имеет сортировку utf8mb4_polish_ci, а набор символов — соответствующий сортировке, который равен utf8mb4.

  • В противном случае (ни CHARACTER SET, ни COLLATE не указаны), используются набор символов и сортировка таблицы.

    CREATE TABLE t1
    (
        col1 CHAR(10)
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    Ни набор символов, ни сортировка не указаны для столбца, поэтому используются значения по умолчанию таблицы. Столбец имеет набор символов latin1 и сортировку latin1_bin.

Предложения CHARACTER SET и COLLATE соответствуют стандарту SQL.

Если вы используете ALTER TABLE для преобразования столбца из одного набора символов в другой, MySQL пытается отобразить значения данных, но если наборы символов несовместимы, может произойти потеря данных.

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

Spec-Zone.ru

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