10.1.3.7 文字セットと照合順序の割り当ての例

MySQL でどのようにしてデフォルトの文字セットおよび照合順序の値が決定されるかを、次の例で示します。

例 1: テーブルおよびカラムの定義

CREATE TABLE t1
(
    c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;

ここでは latin1 文字セットと latin1_german1_ci 照合順序がカラムに指定されています。この定義は明確であり、簡単明瞭です。なお、latin1 カラムを latin2 テーブルに格納することに問題はありません。

例 2: テーブルおよびカラムの定義

CREATE TABLE t1
(
    c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

ここでは、latin1 文字セットとデフォルト照合順序がカラムに指定されています。当然のようですが、デフォルトの照合順序はテーブルレベルからは取得されません。latin1 のデフォルト照合順序は常に latin1_swedish_ci なので、カラム c1 には latin1_danish_ci ではなく latin1_swedish_ci の照合順序が設定されます。

例 3: テーブルおよびカラムの定義

CREATE TABLE t1
(
    c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

ここでは、デフォルト文字セットとデフォルト照合順序がカラムに指定されています。この状況では、MySQL はテーブルレベルをチェックして、カラムの文字セットおよび照合順序を特定します。したがって、カラム c1 の文字セットは latin1、照合順序は latin1_danish_ci となります。

例 4: データベース、テーブル、およびカラムの定義

CREATE DATABASE d1
    DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;
USE d1;
CREATE TABLE t1
(
    c1 CHAR(10)
);

文字セットと照合順序を指定せずにカラムを作成します。テーブルレベルの文字セットと照合順序も指定しません。この状況では、MySQL は、データベースレベルをチェックして、テーブル設定を特定します。その後、この設定がカラム設定になります。したがって、カラム c1 の文字セットは latin2、照合順序は latin2_czech_ci となります。


User Comments
Sign Up Login You must be logged in to post a comment.