MAMPでのデータベースの文字化け問題にぶち当たっていて解決方法を探る。
ページにはちゃんと表示されているのにphpMyAdminで確認すると日本語が文字化け;このままではデータのインポートなど出来ないのでネットで情報探すが知識が乏しいので解決できない。そこでクライアントとサーバーのキャラクターセットの確認が出来るSQLがあったのでphpMyAdminを開き、phpMyAdminでSQlを走らせる
まず、自分の状態を知るための SQL 文
SHOW VARIABLES LIKE 'char%';
引用:MyNA Web Site
SQLタブを選んでSQL文を実行させ確認。
実行結果はこちら
Variable_name Value character_set_client utf8 character_set_connection eucjpms character_set_database latin1 character_set_filesystem binary character_set_results utf8 character_set_server latin1 character_set_system utf8 character_sets_dir /
・・・これって
クライアントが latin1 で、サーバーが日本語の場合は、確実に文字が壊れる。
ってやつです。原因がここでハッキリとわかってめでたしめでたし。>解決しないと;;
mysqlの現状確認のためにターミナル起動しmysqlモニタに入ってみることを試みる
cd /Applications/MAMP/db/mysql/mysql
パスワード設定してあるので
mysql -u root -p
そして表示されたプロンプトにパスワードを入力したらちゃんと入れた。
mysql> status;
実行結果
Connection id: 17
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.19
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: ujis
Db characterset: ujis
Client characterset: ujis
Conn. characterset: ujis
UNIX socket: /Applications/MAMP/tmp/mysql/mysql.sock
Uptime: 22 min 28 sec
んで、もって次に確認
show variables like "char%";
結果
Variable_name Value character_set_client ujis character_set_connection ujis character_set_database ujis character_set_filesystem binary character_set_results ujis character_set_server ujis character_set_system utf8 character_sets_dir
あってるじゃん!!
/Applications/MAMP/db/mysql/mysql/my.cnfをちゃんと読んでます。以下my.cnfの内容
# サーバ設定 [mysqld] default-character-set=ujis skip-character-set-client-handshake # クライアントアプリ (Perl,PHP,etc) 使用時設定 # 注 : ここで設定した上でさらにアプリ側での設定追記も必要 (例) Perl DBI # mysql, mysqldump等 (shell client) に対してもここでの設定は有効 [client] default-character-set=ujis # mysql (標準client) 使用時設定 # mysql (標準client) に対して [client] での設定を上書き [mysql] default-character-set=ujis # mysqldump 使用時設定 # mysqldump に対して [client] での設定を上書き [mysqldump] default-character-set=ujis
ってことは・・・phpMyAdminが問題かもしれない>原因究明続行
ちなみにmy.cnf設定を無しに素のmysqlのshow variables like "char%";での実行結果は
Variable_name Value character_set_client latin1 character_set_connection latin1 character_set_database latin1 character_set_filesystem binary character_set_results latin1 character_set_server latin1 character_set_system utf8 character_sets_dir
PHP4ではmy.cnfの設定が反映されてないって言うか・・なんていうか(混沌)まだまだ悩みは続く