各「文字」カラム (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
と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 はデータ値をマップしようとしますが、文字セットに互換性がない場合、データの損失が生じる可能性があります。