MySQL 8.0 リファレンスマニュアル


10.3.5 カラム文字セットおよび照合順序

すべての「文字型」カラム (CHARVARCHARTEXT 型またはシノニム型のカラム) には、カラム文字セットおよびカラム照合順序があります。 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_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_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_SCHEMA CHARACTER_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 SETCOLLATE も指定されていない場合)、テーブルの文字セットと照合順序が使用されます。

    CREATE TABLE t1
    (
        col1 CHAR(10)
    ) CHARACTER SET latin1 COLLATE latin1_bin;

    カラムに文字セットも照合順序も指定されていないため、テーブルのデフォルトが使用されます。 このカラムには、文字セット latin1 と照合順序 latin1_bin があります。

CHARACTER SET および COLLATE 句は標準 SQL です。

ALTER TABLE を使用して、ある文字セットから別の文字セットにカラムを変換する場合、MySQL はデータ値をマップしようとしますが、文字セットに互換性がない場合、データの損失が生じる可能性があります。


関連キーワード:  文字, セット, 照合, 順序, カラム, COLLATE, CHARACTER, TABLE, col, collation