2010年5月26日水曜日

phpMyAdminで文字化け

ShiftJISで組んだPHPプログラム(けっこう昔から運用中)から、最新のMySQLに書き込むと、文字化けが発生します。


■解決の概要:
PHPで書き込む際に、mb_convert_encoding関数で 日本語文字列をすべて「UTF-8」に変換する。
つまり、表のウェブサイトはSJISでも、データベース内は「UTF-8」で統一するのが無難でしょう。


■それでも文字化けは残るので、さらなる解決法

(1)mb_convert_encoding の書き方を変える。

× ) mb_convert_encoding("文字列", "UTF-8", "SJIS")

○ ) mb_convert_encoding("文字列", "UTF-8", "SJIS-win")

このように、元のエンコードを「 "SJIS-win"」と書く。


(2)/etc/my.cnfを修正:

セクションごとに、UTF-8の設定を追記。

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
default-character-set = utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8






MySQLを再起動する。
sudo service mysqld restart
とか、/etc/init.d/mysqld restart


これで私は直った。
(環境:PHP 5.1.6+mysql5+Admin2.11 )

0 件のコメント: