WordPressをローカル環境でインストールしたところ文字化けが発生。インストールのときに文字コードをUTF-8、EUC-JPのどちらに設定設定も文字化けが発生しました。(S-JISは未確認)
なぜだろうと思いいろいろ調べてみたところデータベース(DB)のMySQL側に問題があるようでした。今回WordPressをインストールしたローカル環境のMySQLはyumでインストールしたのですが、yum(パッケージ)でインストールを行うとMySQLのキャラクタセットがlatin1に強制的に設定されてしまうようです。この為、INSERTする時に文字化けが発生してしまいました。キャラクタセットを変更するには通常はmy.cnfを
[mysqld]
default-character-set=ujis
[client]
default-character-set=ujis
[mysql]
default-character-set=ujis
[mysqldump]
default-character-set=ujis
で設定できます(上記内容はEUC-JPに設定する場合)。
設定を確認するにはコマンドラインでstatusを実行すれば
mysql> status;
--------------
:
(省略)
:
Server characterset: ujis
Db characterset: ujis
Client characterset: ujis
Conn. characterset: ujis
:
(省略)
:
--------------
と表示されてEUC-JPに設定されたことが確認できます。
しかし、MyNaの「mysql コマンドでは大丈夫なのに、PHP,perl,accessなどで文字が ? に化けるのは?(文字化け)」によると、my.cnfを設定してもWordPress(PHP)からINSERTする時にはmy.cnfを無視してINSERTしてしまうようです。実際に試してみても文字化けしてしまいました。my.cnfを無視してしまうようではどうしようもないのでSQLで
SET NAMES ujis;
としてINSERT時にキャラクタセットを指定する方法を行います。この方法を利用するにはWordPressのプログラムを変更する必要があります。変更箇所はwp-includes/wp-db.phpファイルの58行目で
function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
:
(省略)
:
$this->select($dbname);
if(!mysql_query("SET NAMES ujis;"))
die('Error by Set Names.'); // ここを追加
}
と一行追加すれば解消します。
ちなみに今回の環境は以下の通りです。
WordPress:ME 2.0.2
MySQL:4.1.12
PHP:4.3.9
ところで、なぜ、WordPressにはSET NAMESの指定がないのでしょうかね?あってもいいような気がしますが・・・。
Pingback: ワードプレス(WordPress)MTに次ぐブログ構築ツール