ちなみに、PHPからは以下のようにつないでいます。
// PDO接続(PHP 5.3.6以降だとcharsetが使えます $dsn="mysql:dbname=%s;host=%s;charset=utf8";
文字化けする環境と、/etc/my.cnfに対応したもの
$ cat /etc/redhat-release CentOS release 6.5 (Final) $ mysql --version mysql Ver 14.14 Distrib 5.6.19, for Linux (x86_64) using EditLine wrapper $ php -v PHP 5.4.30 (cli) (built: Jun 25 2014 15:27:51) $ yum list installed | grep mysql mysql-community-client.x86_64 5.6.19-2.el6 @mysql56-community mysql-community-common.x86_64 5.6.19-2.el6 @mysql56-community mysql-community-devel.x86_64 5.6.19-2.el6 @mysql56-community mysql-community-libs.x86_64 5.6.19-2.el6 @mysql56-community mysql-community-server.x86_64 5.6.19-2.el6 @mysql56-community $ find / -name libmysql* /usr/lib64/mysql/libmysqlclient_r.so.18.1.0 /usr/lib64/mysql/libmysqlclient_r.a /usr/lib64/mysql/libmysqlclient_r.so /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.a /usr/lib64/mysql/libmysqlclient_r.so.18 /usr/lib64/mysql/libmysqlservices.a /usr/lib64/mysql/libmysqlclient.so /usr/lib64/mysql/libmysqlclient.so.18.1.0 $ php -r "phpinfo();" | grep "PDO" PDO PDO support => enabled PDO drivers => mysql, sqlite PDO Driver for MySQL, client library version => 5.6.19 PDO Driver for SQLite 3.x => enabled
こっちでは
# /etc/my.cnfの文字コード character-set-server=utf8 skip-character-set-client-handshake #超だいじ
普通に文字化けしない環境の設定情報
$ cat /etc/redhat-release CentOS release 6.5 (Final) $ mysql --version mysql Ver 14.14 Distrib 5.6.12, for Linux (x86_64) using EditLine wrapper $ php -v PHP 5.4.29 (cli) (built: Jun 5 2014 16:07:48) $ yum list installed | grep mysql mysql-libs.x86_64 5.5.32-1.el6.remi @remi php-mysql.x86_64 5.4.29-3.el6.remi @remi $ find / -name libmysql* /usr/lib64/libmysqlclient_r.so.12 /usr/lib64/libmysqlclient_r.so.18.0.0 /usr/lib64/mysql/libmysqlclient_r.a /usr/lib64/mysql/libmysqlservices.a /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.a /usr/lib64/mysql/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.16 /usr/lib64/libmysqlclient.so /usr/lib64/libmysqlclient.so.15.0.0 /usr/lib64/libmysqlclient_r.so.15 /usr/lib64/libmysqlclient_r.so.14 /usr/lib64/libmysqlclient_r.so.14.0.0 /usr/lib64/libmysqlclient_r.so.16.0.0 /usr/lib64/libmysqlclient.so.15 /usr/lib64/libmysqlclient_r.so.18 /usr/lib64/libmysqlclient_r.so /usr/lib64/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient_r.so.16 /usr/lib64/libmysqlclient.so.14.0.0 /usr/lib64/libmysqlclient.so.18 /usr/lib64/libmysqlclient_r.so.15.0.0 /usr/lib64/libmysqlclient.so.14 /usr/lib64/libmysqlclient.so.12.0.0 /usr/lib64/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient_r.so.12.0.0 /usr/lib64/libmysqlclient.so.12 $ php -r "phpinfo();" | grep "PDO" PDO PDO support => enabled PDO drivers => mysql, sqlite PDO Driver for MySQL => enabled PDO Driver for SQLite 3.x => enabled
PDO Driver for MySQL => enabled…? でも動いているんですよねー…。 ↓ ↓ ↓
# /etc/my.cnfの文字コード character-set-server = utf8
ちなみに、両方ともMySQL Workbenchやコマンドラインから見るとこうなんだけど
mysql> show variables like "%character%"; +--------------------------+----------------------------+ | 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 | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
文字化けするほうをPHP通して出力すると以下のようになってました。
character_set_client | <strong>latin1</strong> character_set_connection | <strong>latin1</strong> character_set_database | utf8 character_set_filesystem | binary character_set_results | <strong>latin1</strong> character_set_server | utf8 character_set_system | utf8 character_sets_dir | /usr/share/mysql/charsets/ //化けた文字をmb_detect_encodingしたもの index.php#37string(8) "SJIS-win"
インストールしたときにシステムのタイムゾーンUTCだったのとかが関係あるのだろうか。
(途中から/usr/share/zoneinfo/Japanや、/usr/share/zoneinfo/Asia/Tokyoに変更したりした)
やれやれだぜ。