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