2008/9/9 火曜日
MySQLとPerl DBI
ほとんど自分への備忘録。
MySQLをSJISで動かして
Perl DBI (CGI::Application)からアクセスすると、
0x5c 問題が発生。
bind param 的な使い方しているのに。
手動でエスケープ文字を追加してもダメ。
ネットで検索すると大勢の意見が
「SJISは使うな、EUCかUTF8を使って入出力毎にSJISに変換しろ」
ということなんだけれどそうもいかない状況もあるので、
さらに調べていくと
コマンドプロンプトから /usr/bin/mysql でアクセスする際にも
‘可能’
は (0x89c2 0x945c)
‘可能’
とエスケープする必要があるようだ。
(確かにそうだったんだけど、なんで?)
bind paramすると quote() がちゃんと呼ばれているようなんだが、
‘可能’
と変換しているだけみたいなので
同じ理由で動かないのかもしれない。
仕方がないので、
bind paramは使わずに
$self->do(qq{insert into table_name values (‘$variable’)});
として、$variable はその前に
$variable =~ s/^x5c/x5cx5c/;
$variable =~ s/([^x81-x9fxe0-xef][x5c])/$1x5c/g;
$variable =~ s/([x81-x9fxe0-xef][x5c])/x5c$1x5c/g;
とかしておく。
全然スマートじゃないな。
PHPを使う方がマシそうだ。
Oracleじゃこんなことイラナイのに。
Filed under: Computer&Network — tosaka 15:41:46
Comments (0)
コメントはまだありません。