【MySQL】サーバーの文字セット、クライアントの文字セット
MySQLではサーバーが持っている文字セットの指定とクライアントが持っている文字セットの指定があります。
mysql> show variables like 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | ujis | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | ujis | | character_set_system | utf8 | +--------------------------+--------+ 7 rows in set (0.01 sec)
上記の結果だと、クライアントから送られるSQLはUTF-8、結果もUTF-8でもらう。データベースはEUCで作られています。
WebサーバーとDBサーバーが1台のときは、そのサーバーのmy.cnfのとおりの値です。
クライアントとサーバーが別々のマシンになると、クライアント側の設定が反映される項目(character_set_client、character_set_connection、character_set_results)とサーバー側の設定が反映される項目(character_set_database、character_set_server)があるようです。
データベースは同じサーバーだけど、違うWebサーバーから接続したら、character_set_client が ujis になっていたという現象も発生します。
とにかく、MySQLデータベースからデータを取得したら文字化けしたときは、これをしてみることをお勧めします。
show variables like 'character\_set\_%';
コメント