MySQL が扱えるキャラクタセット(character set)は,次のような種類がある.
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 に詳細な説明あり。
ujis *EUC-JP Japanese), eucjpms (UJIS for Windows Japanese)
ujis で無く、eucjpms を使うべき理由は、 http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html に詳細な説明あり。
utf8 (UFT-8 Unicode), ucs2 (UCS-2 Unicode)
シフト JIS 系なら cp932、 EUC-JP 系なら eucjpms、 unicode 系なら utf8 が有力な候補になる。
では、この3つのうち、どれにするかは、場合によって違う。 以下は,私の考え.
使用可能なキャラクタセット(character set)を確認するには, コマンドライン・クライアント を使って,
show character set;
を実行する
使用可能なキャラクタセットはたくさんありますが、そのうちどれが、実際に使用されているか、簡単に確認できる.
次のSQLを実行
show variables like 'character_set%';
次のSQLを実行
show variables like 'collation%';
サーバ文字コードセットの設定法はいくつかある.
次のように指定できる.
CREATE DATABASE testdb DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci;
上記に「character_set_client, haracter_set_connection, haracter_set_results の値は、クライアントの種類ごとに変わる値」である. これらの値のことを、「クライアント文字コードセット」と呼ぶことがある.
クライアント文字コードセットは、クライアントの種類ごとに違う値である.これが基本。 ところが、(ややこしいことに)、MySQL の設定ファイル mysql.ini (または mysql.cnf) の [mysqld] 部分に、 skip-character-set-client-handshake の値を設定すると、 クライアント文字コードセットとして、character_set_server に設定された値が(クライアントの種類に関係なく)使用されるようになる. これを、クライアント文字コードセット自動変換の解除という.
データベースダンプ時の文字コードセット自動変換機能を解除したいときは、 default-character-set は「binary」に指定すること。 (データベースダンプ時の文字コードセット自動変換機能を使うことの欠点は、文字化けしているのに気づきにくい場合があるという問題)。