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以降で設定の名前が変わっていてハマった。。
- 作者: 小島まさご
- 出版社/メーカー: ソーテック社
- 発売日: 2011/11/19
- メディア: 単行本
- 購入: 1人 クリック: 10回
- この商品を含むブログ (2件) を見る