🍣すしでもどうですか

略してすしどう。趣味のサーバーいじりとかメモ。

tiarra の Log::DBI で MySQL に突っ込んだ文字列が化ける

とりあえず応急的には解決したかなあと思うのでメモしておきます。

何が起きたか

tiarraMetro を使いたくて、tiarra のログを MySQL に保存すべく Log::DBI を使用しています。tiarra 側の文字コード設定を UTF-8 にしているので、当然データベース側も UTF-8 に合わせてあります。

しかし、いつの頃からか、データベースに保存されている文字列が化けてしまうようになりました。ちゃんと調べていませんが UTF-8 だったものを iso-2022-jp にしてしまっている雰囲気です*1

まあとにかく、UTF-8 だぞとちゃんと明示すれば直りそうです。

module/Log/DBI.pm を直接編集する

もはや tiarra がいつのバージョンなのかもよく分からない上に、tiarraMetro 関係の修正がちょっとだけ入っているものを使っているので、その点ご注意ください。

DBI.pm も、tiarraMetro の配布物に含まれるものを使っているので、行数などが微妙に違うかもしれません。 私の環境では 71 行目でした。

ここに , mysql_enable_utf8 => 1 を追加しました。

 70     my $dbh = DBI->connect($param->{source}, $param->{user}, $param->{pass},
 71                        { RaiseError => 1, AutoCommit => 1, mysql_enable_utf8 => 1 })
 72         or die $DBI::errstr;

これで様子を見ていますが、2日くらい経って、今のところ文字化けは起きていません。

再発しませんように。

*1:不思議な事に、tiarra を再起動するとしばらく(おそらく数時間)は文字化けせずに正しく保存される。