コンソールでMySQLに接続した際の文字化けを直す

某所で動いているMySQLのDBにコンソール(mysqlコマンド)を使ってアクセスしたら日本語表示が文字化けしてしまった。

my.cnf(MySQLの設定ファイル)やアプリケーション側でUTF8を使用するよう指定されているので、アプリケーションで使用する分には問題ないのですが、メンテナンス等でコンソールから接続すると日本語などのマルチバイト文字が文字化けして、コンテンツがよくわからん、という症状。

ちなみにMySQLのバージョンは5.0系。

mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.00 sec)


こんな感じだった。my.cnfの[mysqld]の項で、

default-character-set = utf8

↑は設定してあったので、以下の項を追記した。

skip-character-set-client-handshake

こいつを使うと、サーバのキャラクタセットを優先してくれるらしい。

クライアント情報を無視して、サーバのデフォルトのキャラクタ セットを使用するには、--skip-character-set-client-handshake を使用する (MySQL が MySQL 4.0. のように動作するようにする。)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.3 サーバーコマンドオプション


で、設定後、確認したところ、、、

mysql> 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   |
+--------------------------+--------+
7 rows in set (0.00 sec)

となっており、無事コンソール接続時の日本語表示の文字化けは解決。