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_swedish_ci
の照合順序ではなく、latin1_danish_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
のキャラクタセットはlatin1
、照合順序はlatin1_czech_ci
となります。