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