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