2007年05月28日

接続のキャラクタセットおよび照合順序

ほとんど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; }
投稿者 iwazawa : 21:15 | コメント (0) | トラックバック