Spec-Zone .ru
спецификации, руководства, описания, API
|
Каждый "символьный" столбец (то есть, столбец
типа CHAR
, VARCHAR
,
или TEXT
)
имеет набор символов столбца и сопоставление столбца. Синтаксис определения столбца для CREATE TABLE
и ALTER
TABLE
имеет дополнительные пункты для того, чтобы определить набор символов столбца и
сопоставление:
col_name
{CHAR | VARCHAR | TEXT} (col_length
) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]
Эти пункты могут также использоваться для ENUM
и SET
столбцы:
col_name
{ENUM | SET} (val_list
) [CHARACTER SETcharset_name
] [COLLATEcollation_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
и X
COLLATE
определяются, набор
символов Y
X
и сопоставление Y
используются.
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
определяется без X
COLLATE
,
набор символов X
и его сопоставление значения по умолчанию
используется.
CREATE TABLE t1( col1 CHAR(10) CHARACTER SET utf8) CHARACTER SET latin1 COLLATE latin1_bin;
Набор символов определяется для столбца, но сопоставление не. У столбца есть набор символов utf8
и сопоставление значения по умолчанию для utf8
, который является utf8_general_ci
.
Чтобы видеть сопоставление значения по умолчанию для каждого набора символов, используйте SHOW COLLATION
оператор.
Если COLLATE
определяется без Y
CHARACTER
SET
, набор символов, связанный с Y
и сопоставление Y
используются.
CREATE TABLE t1( col1 CHAR(10) COLLATE utf8_polish_ci) CHARACTER SET latin1 COLLATE latin1_bin;
Сопоставление определяется для столбца, но набор символов не. У столбца есть сопоставление utf8_polish_ci
и набор символов является тем, связанным с сопоставлением,
которое является utf8
.
Иначе, табличный набор символов и сопоставление используются.
CREATE TABLE t1( col1 CHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin;
Ни набор символов, ни сопоставление не определяются для столбца, таким образом, табличные значения
по умолчанию используются. У столбца есть набор символов latin1
и
сопоставление latin1_bin
.
CHARACTER SET
и COLLATE
пункты являются стандартным
SQL.
Если Вы используете ALTER TABLE
чтобы преобразовать столбец от одного набора символов до другого,
MySQL пытается отобразить значения данных, но если наборы символов являются несовместимыми, может быть потеря
данных.