Spec-Zone.ru › MySQL 5.7

10.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 utf8 COLLATE utf8_unicode_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

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

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

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

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

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

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

    Сортировка указана для столбца, но набор символов нет. Столбец имеет сортировку utf8_polish_ci, и набор символов связан с этой сортировкой, который равен utf8.

  • В противном случае (ни 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-5.7-en/charset-column.html

Spec-Zone.ru

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