拙著『Webアプリケーション』では、Windowsのコマンドプロンプトでmysql.exeを対話的に使うときは、「
mysql -uユーザ名 -pパスワード --default-character-set=cp932
」のようにして、文字コードをcp932にすることを推奨しています。理由は2つあります。
- コマンドプロンプトでUTF-8を利用するのが面倒(特にWindows XPで)
- MySQL 5.5以前のmysql.exeにはUTF-8に関するバグがある
第1の問題は完全には解決されていません。日本語環境のコマンドプロンプトのデフォルトの文字コードはcp932ですが、プロパティでフォントをMS ゴシックに変更してから「chcp 65001
」とすると、UTF-8で日本語を利用できます(変更してからプロパティを開いてはいけません)。面倒です。Windows XPではさらに作業が必要だったのですが、XP自体がそろそろ終わりなのでまあいいでしょう。(MS ゴシック以外のフォントを使いたい場合は先に一手間必要です。「コマンドプロンプト フォント 変更」などで探してください。)
第2の問題はMySQL 5.6で解決されました(XAMPPなら1.8.3以降)。
というわけで、前準備(フォントの変更)がバッドノウハウではありますが、p.100の脚註11とp.188の「WindowsのコマンドプロンプトではCP932(Windows-31J)しか使えない」という記述は昔話になりました。
コマンドプロンプトでUTF-8を使っている様子を以下に掲載します(設定ファイルはデフォルトのまま、「--default-character-set=utf8
」や「SET NAMES utf8;
」は無くても大丈夫です)。
C:\>chcp 65001 Active code page: 65001 C:\>mysql -uroot test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 77 Server version: 5.6.14 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ 8 rows in set (0.00 sec) mysql> CREATE TABLE t (name TEXT) CHARSET=utf8; Query OK, 0 rows affected (0.08 sec) mysql> INSERT t(name) VALUES ('안녕하세요'); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM t; +-----------------+ | name | +-----------------+ | 안녕하세요 | +-----------------+ 1 row in set (0.00 sec)
きれいに表示されないという問題が残っていますね。