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 件のコメント:
コメントを投稿