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
となります。