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_nameCOLLATE, используются набор символовcollation_namecharset_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_nameCOLLATE, используется набор символов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_SCHEMACHARACTER_SETS. -
Если указана
COLLATEбезcollation_nameCHARACTER 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.