「デフォルトのキャラクタセットおよび照合順序の指定」

本日は、MySQLのリファレンスマニュアル 9.3 の学習。「デフォルトのキャラクタセットおよび照合順序の指定」について。

サーバ、データベース、テーブル、カラムの 4 段階で、キャラクタセットと照合順序のデフォルト設定が用意されています。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.3 デフォルトのキャラクタセットおよび照合順序の指定

使い方によっては、中国語だけ入るカラムをつくることだって出来るということか。

サーバーでの設定

"サーバのキャラクタセットと照合順序は、mysqldの起動時に使用するオプションに依存。"コンパイル時にも指定可能。

最新のサーバキャラクタセットと照合順序は、character_set_serverおよびcollation_serverのシステム変数値で決定されます。これらの変数はランタイムで変更可能です。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.3.1 サーバのキャラクタセットおよび照合順序

データベースでの設定

CREATE DATABASEおよびALTER DATABASEステートメントに、指定するためのオプション節あり。

デフォルトのデータベースに対するキャラクタセットと照合順序は、character_set_databaseおよびcollation_databaseのシステム変数値によって決定されます。デフォルトのデータベースが変わるたびに、サーバはこれらの変数を設定します。デフォルトのデータベースがない場合、変数は、character_set_serverおよびcollation_serverといったサーバレベルのシステム変数と同値になります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.3.2 データベースのキャラクタセットおよび照合順序

分かりづらいな。原文。

The character set and collation for the default database can be determined from the values of the character_set_database and collation_database system variables. The server sets these variables whenever the default database changes. If there is no default database, the variables have the same value as the corresponding server-level system variables, character_set_server and collation_server.
MySQL :: MySQL 5.1 Reference Manual :: 10.1.3.2 Database Character Set and Collation

テーブルでの設定

CREATE TABLEおよびALTER TABLEステートメントに、指定するためのオプション節が有り。

カラムでの指定

各「文字」(CHAR、VARCHARまたはTEXT型)にはカラムキャラクタセットとカラム照合順序あり。定義文に指定するためのオプション節あり。

文字列リテラルでの指定

これは上記とは少し違うが、

SELECT _latin1'string' COLLATE latin1_danish_ci;

のような使い方が可能。

まとめ

MySQLでは、サーバ、データベース、テーブル、カラムでデフォルトのキャラクタセットと照合順序が設定可能。それらは、定義時にオプション節によって行うことが多い。

MySQLへの理解が難しくなるものの、1つのサーバーに複数のキャラクタセットが混在がするようなメリットが得られる。