ほとんど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;
}
コメントする