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)
トラックバック

このエントリーのトラックバックURL:

コメントはまだありません »

コメントはまだありません。

コメントする





(一部のHTMLタグを使うことができます。)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

上記画像の英数5文字(英字はAからFのみ)を入力して「送信」を行ってください。

  

画像が読みにくい場合は「再生成」を行ってください。

2008年9月
« 8月   10月 »
 123456
78910111213
14151617181920
21222324252627
282930