背景
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;