各データベースにはデータベース文字セットとデータベース照合順序があります。 CREATE DATABASE
および ALTER DATABASE
ステートメントには、データベース文字セットおよび照合順序を指定するためのオプション句があります。
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
SCHEMA
というキーワードは DATABASE
の代わりに使用できます。
CHARACTER SET
および COLLATE
句を使用すると、文字セットと照合順序が異なる複数のデータベースを同一の MySQL Server に作成できます。
データベースオプションはデータディクショナリに格納され、INFORMATION_SCHEMA.SCHEMATA
テーブルをチェックして調べることができます。
例:
CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL では、データベース文字セットとデータベース照合順序が次のように選択されます。
CHARACTER SET
とcharset_name
COLLATE
の両方が指定されている場合、文字セットcollation_name
charset_name
と照合順序collation_name
が使用されます。CHARACTER SET
がcharset_name
COLLATE
なしで指定されている場合、文字セットcharset_name
とそのデフォルトの照合順序が使用されます。 各文字セットのデフォルトの照合順序を確認するには、SHOW CHARACTER SET
ステートメントを使用するか、INFORMATION_SCHEMA
CHARACTER_SETS
テーブルをクエリーします。COLLATE
がcollation_name
CHARACTER SET
なしで指定されている場合は、collation_name
および照合collation_name
に関連付けられた文字セットが使用されます。それ以外の場合 (
CHARACTER SET
もCOLLATE
も指定されていない場合)、サーバー文字セットとサーバー照合順序が使用されます。
デフォルトのデータベースに対する文字セットと照合順序は、character_set_database
および collation_database
システム変数の値から判別できます。 デフォルトのデータベースが変わるたびに、サーバーはこれらの変数を設定します。 デフォルトのデータベースがない場合、変数は、character_set_server
および collation_server
という対応するサーバーレベルのシステム変数と同値になります。
特定のデータベースのデフォルト文字セットおよび照合順序を確認するには、次のステートメントを使用します。
USE db_name;
SELECT @@character_set_database, @@collation_database;
また、デフォルトのデータベースを変更しないで値を表示するには、次のステートメントを使用します。
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';
データベース文字セットおよび照合順序は、サーバー操作の次の側面に影響します。
CREATE TABLE
ステートメントでは、テーブル文字セットおよび照合順序が指定されていない場合、データベース文字セットおよび照合順序がテーブル定義のデフォルト値として使用されます。 これをオーバーライドするには、CHARACTER SET
およびCOLLATE
テーブルオプションを明示的に指定します。CHARACTER SET
句を含まないLOAD DATA
ステートメントでは、サーバーは、character_set_database
システム変数によって示された文字セットを使用して、ファイル内の情報を解釈します。 これをオーバーライドするには、CHARACTER SET
句を明示的に指定します。ストアドルーチン (プロシージャおよびファンクション) の場合、宣言に
CHARACTER SET
またはCOLLATE
属性が含まれていない文字データパラメータの文字セットおよび照合順序として、ルーチン作成時に有効なデータベース文字セットおよび照合順序が使用されます。 これをオーバーライドするには、CHARACTER SET
およびCOLLATE
を明示的に指定します。