MySQLのキャラクタセット
使用可能なキャラクタセット(character set)
MySQLで使用できるキャラクタセット(character set)の主要な種類は以下の通りである.
- シフトJIS
sjis (Shift-JIS Japanese), cp932 (SJIS for Windows Japanese.「Windows Code Page 932」の略)
sjisではなくcp932を推奨する詳細な理由については, http://www.scs.co.jp/mysql/docs/Interop2006MySQL_JP_handling.pdf を参照されたい.
- EUC-JP
ujis *EUC-JP Japanese), eucjpms (UJIS for Windows Japanese)
ujisではなくeucjpmsを推奨する詳細な理由については, http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html を参照されたい.
- unicode
utf8 (UFT-8 Unicode), ucs2 (UCS-2 Unicode)
シフトJIS系ではcp932,EUC-JP系ではeucjpms,unicode系ではutf8が主要な選択肢となる.
これら3つの中からの選択は,使用環境や要件によって判断する必要がある.以下に選択時の重要な考慮点を示す.
- eucjpmsはJavaのキャラクタセットとの完全な互換性が保証されていないという制約がある.
- utf8はWeb環境との親和性が高く,特別な要件がない限り,MySQLレイヤーとWebなどの上位レイヤーで同一の文字コードを採用することが推奨される.
使用可能なキャラクタセット(character set)の確認法
使用可能なキャラクタセット(character set)は,コマンドライン・クライアントで以下のコマンドを実行することで確認できる.
show character set;
を実行する

使用されるキャラクタセットの確認
多数存在する使用可能なキャラクタセットの中から,実際に使用されているものを効率的に確認する方法を説明する.
- 現在開いているデータベースのキャラクタセットの確認
以下のSQLを実行する
show variables like 'character_set%';
- collationの設定の確認
以下のSQLを実行する
show variables like 'collation%';
- exitで終了する
分析
- character_set_server,character_set_databaseは,MySQLのサーバ文字コードセットを定義する重要な設定変数である.
- character_set_client,character_set_connection,character_set_resultsの値は,クライアントの種類に応じて変動する値であり,異なる値が設定されている場合があることに注意が必要である.
サーバ文字コードセットの設定法
サーバ文字コードセットの設定には以下の方法がある.
- mysql.ini(またはmysql.cnf)という名称のMySQL設定ファイルの[mysqld]セクションと[mysql]セクションに,「default-charactser-set=cp932」のような設定行を追加する(「cp932」は使用したい文字コードセットの名称に置き換える).
- または,データベース生成時のオプションとして指定する.
以下の形式で指定可能である.
CREATE DATABASE testdb DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci;
クライアント文字コードセット自動変換機能の解除
前述のとおり,character_set_client,character_set_connection,character_set_resultsの値はクライアントの種類によって異なる値を持つ.これらの値を総称して「クライアント文字コードセット」という.
クライアント文字コードセットは基本的にクライアントの種類ごとに異なる値を持つ.ただし,MySQL設定ファイルmysql.ini(またはmysql.cnf)の[mysqld]セクションにskip-character-set-client-handshakeを設定すると,クライアントの種類に関係なく,character_set_serverに設定された値がクライアント文字コードセットとして使用される.この機能をクライアント文字コードセット自動変換の解除という.
データベースダンプ時の文字コードセット自動変換機能の解除
データベースダンプ時の文字コードセット自動変換機能を解除する場合は,default-character-setを「binary」に設定する必要がある.これは,データベースダンプ時の文字コードセット自動変換機能により,文字化けが発生しても検出が困難になる可能性があるためである.