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
となります。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.