Trasis Inc.

渋谷拠点のシステム開発会社

MovableType(MTOS)+mod_fcgid +mysqlでの文字化けを直す

背景

MTOS を mod_fcgid 上で動かすと高速化できるが、しばらくすると画面が文字化けしていた。
データベースは mysql 5.2.4 を使用している。

再現方法

# service httpd reload
# service mysql restart

原因

Apache 起動後しばらくするとデータベースとのコネクションが切れる。
その後再接続するときに、MovableType内部で「set names utf8」が実行されないため、発生する。

対策

/etc/my.conf に次の記述を追加した。

default-character-set = utf8
skip-character-set-client-handshake

考察

本当は mt-config.cgi やMTOSの修正で対策できるのが良かったが、うまくいかなかった。

mt-config.cgi に次の記述を追加するのは、効果がなかった。

SQLSetNames 1

また、lib/MT/ObjectDriver/Driver/DBD/mysql.pm の 72行目付近に次の行を追加したところ、DBから取得したデータ以外の画面上の日本語が文字化けした。

$dbd->{mysql_enable_utf8} = 1;