MySQLMemo007

DBがUTF-8だとWindowsのコマンドプロンプトで文字化けする~;;

DBをUTF-8で運用する。DBを利用する側のWEBアプリケーションもUTF-8で構築する。

よくある話です。

で、mysqlコマンドでデータベースに接続して、select * from テーブル名 とかしてテーブルの内容を確認する。

文字化けして表示される。

よくある話です。

★ ★ ★

データベースの設定を確認するため、

 show variables like 'character_set%';

してみます。↓こんな感じに表示されたりします。

+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

★ ★ ★

コマンドプロンプトがUTF-8に対応していないから悪いんだ!
やい貴様!UTF-8に対応しろ!

…実はすでに対応しているんですねぇ。

マウスで設定はできないけど、コマンドで

chcp 65001

と打ち込めば、UTF-8になります。

あるいは次のような内容のバッチファイル(ファイル名は utf8cmd.bat とかにする)を作って、そいつでcmdを起動します。

%SystemRoot%\system32\cmd.exe /f:on /k "chcp 65001"

《参考》

★ ★ ★

…と、ここまでは同じような悩みを抱えた方はGoogle検索してなんとかたどりつく解答ではないでしょうか。

実はこの話には続きがあって、UTF-8対応にはなったけど、結局表示が文字化けする。って話。

理由は、フォントの選択が日本語に対応していないものになっているから。これもぐぐればよく出てきます。

じゃあフォント変更すりゃいいじゃん、ってプロパティをいじろうとすると、なんと日本語フォントが選択できない状態。

なんとかならないかなー。

って、探すと「レジストリをいじればいいよ」って話が見つかるはずです。

《参考》

でもこれ、どういうわけかやってもうまくいかないんですよね。 何が悪いんだろう…

★ ★ ★

mysqlコマンドに何かnkf的なフィルタをかませられないかな?とか
もはやこうなったら独自コマンドプロンプトをC#かなんかで作成するしかない!とか
いろいろ考えましたが…。

こと、今回のmysqlに関しては以下の手順で回避できることがわかりました。

  1. character_set_client, character_set_connection, charcter_set_resultの3パラメータをsjisに変更する。
    set character_set_client='sjis';
    set character_set_connection='sjis';
    set character_set_results='sjis';
    
  2. きちんと変更されていることを確認する。
    mysql> show variables like 'character_set%';
    +--------------------------+-------------------------------------+
    | Variable_name            | Value                               |
    +--------------------------+-------------------------------------+
    | character_set_client     | sjis                                |
    | character_set_connection | sjis                                |
    | character_set_database   | utf8                                |
    | character_set_filesystem | binary                              |
    | character_set_results    | sjis                                |
    | character_set_server     | utf8                                |
    | character_set_system     | utf8                                |
    | character_sets_dir       | C:\xampp\mysql\share\charsets\ |
    +--------------------------+-------------------------------------+
    8 rows in set (0.00 sec)
    
  3. 日本語が入っているテーブルをSELECTしてみる。

当方の環境(Windows7 SP1, MySQL 5.5.16(XAMPP1.7.7のもの))ではこれで文字化けせずにSELECTできました。

まっ、phpMyAdmin使えばー?って言われそうですが、まあいいじゃないですか。

ちなみに上記設定、mysqlコマンドを一旦抜けてもう一度接続すると、
(環境や設定にもよるかもしれませんが、少なくとも当方の環境では)
元に戻っちゃってます。

接続する都度変更しなければならないです。

多分これも、それが面倒であればバッチファイルかなんか作れば解決すると思いますが。

サーバの設定をいじっちゃいけない現場とかでは逆にいいかも。

最終更新:2013年07月16日 11:43