SQLの実行結果が文字化けしてしまうことがあります。
原因としてはサーバの文字設定とPHPの文字設定が違うからです。
MySQL の文字設定を問い合わせてみると…
SHOW VARIABLES LIKE 'char%';
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 ujis
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
character_set_server ujis
これが問題っぽいです。
character_set_filesystem binary
これはこのままで問題ないです。(変更できない)
で、この設定を(character_set_server) を変えればよいのですが、
私の使用しているレンタルサーバでは設定ファイルを触れないので
この設定を変更できません。
では、どうすれば・・・???
根本的な解決策は見つからないのですが、とりあえずの対応方法が
あるので紹介します。
SQLを実行する際に次のコマンドを一緒に入力します。
SET character_set_server = utf8;
例:
SET character_set_server = utf8;
SELECT * FROM hogetbl;
これで、文字化けはしなくなると思います。
ちなみにこのコマンドを実行したあとのサーバの設定は次のようになります。
SET character_set_server = utf8;
SHOW VARIABLES LIKE 'char%';
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/
ちゃんと character_set_server が変わっていますね。
でも、一つ問題が・・・
この設定変更は毎回入力してやらないと有効になりません。
ちょっとめんどくさいですが、これでとりあえずは解決できました。
こういうところがレンタルサーバの使いづらいところですね。