| 66件目(121件中) |

phpMyAdminで文字化け

固定リンク:#0000000058   投稿者:ZiSTA 日時:2006-11-25 12:25:44   コメント( 0

phpMyAdminで文字化けしていて、色々探ったり試したりしました。


現象が起きているサーバー環境:
MySQL 4.1~
phpMyAdmin 2.8.x
PHP Version 4.3.x/5.1.x


MySQLの文字コードは、UTF8で設定されていました。
PHPファイルの文字コードも、UTF8で作成しています。


PHPのアプリケーションからは文字化けしません。
phpMyAdminでは文字化けします。


MySQL4.1以降の文字コードの扱いについて分かりやすい解説がMySQL4.1/9.MySQLの実験/3.漢字の使用にありました。


どうやら、MySQLの文字コード変換機能が絡んでいるようです。それはMySQLサーバーの文字コードをMySQLクライアントの文字コードの関係のようです。


PHPのmysql_client_encoding($link) 関数を使うとPHPが使っているMySQLクライアントの文字コードが分かります。今回の場合、それはlatin1でした。これはmy.cnfでcharacter_set_clientがUTF8に設定されていていようとも変わりません。PHPとMySQLの個人的まとめにmy.cnfの設定とクライアントの文字コードの関係が詳しく書かれています。


MySQLサーバー(UTF8)とMySQLクライアント(latin1)で何らかの変換が起きてしまっているのが今回の文字化けの原因のようです。


PHPがMySQLクライアントでUTF8を扱っている事をMySQLサーバーに伝えるために、PHPのアプリケーションから毎回'SET NAMES UTF8'といクエリを投げます。すると文字化けは解消されます。php.ini等のPHPの設定には、このようなMySQLクライアントの文字コードに関する項目はなさそうです。


データを変換する
新規にデータを入力する場合は上記の'SET NAMES UTF8'で問題ないのですが、既に運用していてデータベースにデータがある場合は困ります。そこで、入力済みデータを一旦全て書き出し、読み込ませる事にします。


phpMyAdminからデータを書き出すと文字化けしています。いくつか試した結果、データを書き出す時にphpMyAdminの設定(config.inc.php)を変える方法で上手く行きました。このブログのデータでは、上手く再登録できているようです。


データを書き出す時(エクスポート)
$cfg['DefaultLang'] = 'en-iso-8859-1';
$cfg['Lang'] = 'en-iso-8859-1';


データを読み込ませる時(インポート)/通常
$cfg['DefaultCharset'] = 'utf8';
$cfg['Lang'] = 'ja-utf-8';

 

コメント

| 66件目(121件中) |
↑ ページトップ