ほとんどPHPでできているシステムなのですが、訳あってPerlから更新作業をする必要ができてしまい(というかPerlで書きたかった)一通り思い通りに動くものができた。
ところが日本語のデータが化ける。MySQL(バージョンは4.1)で保持している日本語のデータはSJISで格納されている(不本意ながら今さら変えられない)。そして、もちろんDBIでINSERT/UPDATEする時にEncode::decode/encodeを使ってSJISで格納しているにも関わらず化けてしまう。かなり悩んだあげく、やっとMySQLのドキュメントを見つけた。
次のようにconnect()直後に送信/受信のキャラクタセットをSJISであると指定してあげれば良い様です。
 sub db_connect {
     my $dsn = "DBI:mysql:database=$DB;host=$DB_HOST";
     my $dbh = DBI->connect($dsn, $DB_USER, $DB_PASS);
     unless ($dbh) {
 	error("Coudn't connect Database $dsn");
 	die "Coudn't connect Database $dsn";
     }
     my $stmt = $dbh->prepare("SET CHARACTER SET SJIS ");
     $stmt->execute();
     return $dbh;
 }