2006年07月19日

xampp:Mysqlに関するPHPMyAdminの文字化け

xamppを入れたのですが、PHPMyAdminでの日本語データ操作時に文字化けが発生。色々と他の方々の事例を調べてあれやこれやと試してやっとこ解決。そのメモを。

phpMyAdminだけが文字化けする場合はこちら(2007/05/02)
XamppのphpMyAdminの文字化けーその2

■環境
ApacheFriends XAMPP (basic package) version 1.5.3a
・Apache 2.2.2
・MySQL 5.0.21
・PHP 5.1.4 + PHP 4.4.2-pl1 + PEAR
・phpMyAdmin 2.8.1

■試したこと
1)my.cnfの各項目に以下のコードを追加 → 解決せず

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

2)phpMyAdminフォルダ内のconfig.inc.phpの文字設定をutf-8に変更 →解決せず

$cfg['DefaultLang'] = 'utf-8';
$cfg['DefaultCharset'] = 'utf-8';

3)phpMyAdminで作成したテーブルの照合順序をLatin1~からutf8_unicode_ciに変更
→phpMyAdmin内の文字化け解消!

照合順序の変更の詳しい手順は他に掲載されていると思うのではしょって説明すると、phpMyAdmin画面で、左側のフレームよりテーブルを選択した後、右側の画面の上にある「操作」を押すと、テーブルのオプションで照合順序などもろもろ変更することができます。


これで、とりあえず解決したと思ったのですが、今度はPHPでSQLからデータを取り出す際、文字化けがまだ発生していて、解決ならず。

4)これは呼び出すPHP側で文字コードの指定することにより解決しました。
SQLからデータを呼び出すphpの中で以下の命令をSQLに送信。

$sql = "SET NAMES sjis"; // SET CHARACTER SET SJISでも確認できました
$result = mysql_query($sql);


■参考
愛と苦悩の日記:「XAMPP上のPHP+MySQL文字化け解決」エントリより
やんばるくいな「MySQL5文字化け」エントリより

追記

文字化け関連の単語検索でたどり着いている人が結構いるみたいなので、他の文字化け要因となりえる可能性を掲載します。


チェックすること
・データベースに送信するクライアント側の文字コードとデータベースの文字コードは同じか?
(XAMPPの2.8の場合DBはUTF-8)、PHPなどからデータベースにアクセスする際HTMLとPHPの文字コードがUTF-8になっているか確認を。FlashからPHPを介してデータベースに格納する場合なども同様。もしクライアント側がPHPで書かれていて文字コードSJISなどの場合、mb_convert_encoding(変数,"変更したい文字コード","元の文字コード")関数を使用して文字コードを変更してやる必要があります。

変数$textに入った内容の文字コードを変更
=====================================
$text = "あいうえお";
$text = mb_convert_encoding($text,"UTF-8","SJIS");

・他、Flash-PHP-DBなどの構成をしている場合、Flashから送られている内容がPHPが受け取った段階で文字化けしていないかなど確認するなど、一つ一つ原因をつぶしていくと解明するのではと思います。


さらに追記07/01/19

昨年末辺りにMySQL4.0以下のバージョンからMySQL4.1へデータの移動を一度試みる機会があったのですが、どうやってもうまくいかず断念。どうやら自動的に変換してくれる機能がじゃまものらしくて、色々調べましたが結局僕は断念しました。どうしてもやらなければいけない場合、2つのMySQL間にプログラム書いて咬ませてやってデータを仲介すればできると思います。

phpMyAdminだけが文字化けする場合はこちら(2007/05/02)
XamppのphpMyAdminの文字化けーその2