Mysqlのコンソールが文字化ける(こんなことだった)

( DB )

文字コード関連の話。ここ数年文字コードの話ってあるけどさなかなか統一されないよねっていうことと 設定箇所がまだ乱立してるのが面倒くさい。 今だとPHP+apache+linux+mysqlの4つそれぞれせってしないといけないもんね。

んで今回も少しだけとまどったわけなのです。ほんとにちょっとだけよ。

まぁ、そのときの状態。 ①HTTPの入力・出力・内部処理はUTF-8で画面出力自体は問題なく表示される。 ツーことはDBには同じ文字コードで入っているはず。 ②コンソール上でクライアント動かしてSQL打っても表示されない。 ツーことはクライアントの設定かな

あ、それですね。

まずはDBの文字コード確認。

mysql> SHOW CREATE DATABASE testdb;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| testdb| CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

クライアントはどうか

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

グーグルちゃんのおかげで設定すべき箇所みつけました。

# char set
default-character-set = utf8

# サーバのエンコードを引き継ぐらしい
skip-character-set-client-handshake

設定後の確認

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)

はいおk