PHPからMySQLにINSERTすると文字化けする

単純にINSERTしてみたら文字化け発生。
まずMySQLの設定を確認してみる。
MySQLのコンソールから以下のコマンドを叩く。

mysql>show variables like "char%";

するとどうでしょう。まったくutf-8になっていませんw

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

これを全部想定文字コードのUTF-8にすれば治るだろうということで
MySQLの設定ファイルの項目を調べてみる。

MySQLの設定ファイルはmy.cnfとmy.iniがあり、しかも場所は色んなパスが指定されている。mysql --helpで場所が表示されるらしい。

で、[http://1000g.5qk.jp/2010/11/04/xampp%E3%81%AEmysql%E3%81%A7%E6%AD%A3%E3%81%97%E3%81%8Futf-8%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/:title]を参考に設定。

>||
# MySQL >= 5.5 用の設定
# [client]ブロックに下記の行を追加する
default-character-set=utf8
 
# [mysqld]ブロックに下記の行を追加する
character-set-server=utf8
skip-character-set-client-handshake

さっきのコマンドで文字コードが正しく設定できたか確認。

+--------------------------+--------------------------------+
| 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\ |
+--------------------------+--------------------------------+

できた!
途中、mysql5.5以降で設定の名前が変わっていてハマった。。

実践マスター PHP+MySQL PHP5対応

実践マスター PHP+MySQL PHP5対応