● Aug 17, 2001 (Fri) 18:31 - DBD::Oracle PerlでDBD::Oracle使って,VARCHAR2の列をSELECTするとき, NLSのCHARSET変換によってバイト数が増えた場合で, かつ変換前のCHARSETでの最大サイズを超えた場合, エラーがでてしまうという問題が‥‥‥. DBI-japanに投げたら,やっぱり半分仕様っぽいような返事が・・・ というわけで,自力でソース読んでパッチ当て. OCIのマニュアル,1300ページ以上あるんですが(涙) OCIで,変換後のバイト数を取得する方法は結局わからず, 余裕を見てバッファを4倍にすることに. とりあえず問題なく動作するようにはなりました. パッチはDBI-japanにも投げたけど,以下のような感じ. これ,本家に投げていいのかな‥‥‥. まぁ,しばらく使ってトラブルなかったら投げてみよう. ヨーロッパ系の言語(aの上に点がついたりするような)でも 同じ問題は起こる可能性があるし. [root@mana DBD-Oracle-1.08]# cat ../DBD-Oracle-1.08-nlsconv-buff.patch --- oci8.c Tue Aug 7 09:25:40 2001 +++ ../DBD-Oracle-1.08.patched/oci8.c Fri Aug 17 18:08:56 2001 @@ -816,7 +816,7 @@ /* the simple types */ case 1: /* VARCHAR2 */ case 96: /* CHAR */ - fbh->disize = fbh->dbsize; + fbh->disize = fbh->dbsize * 4; fbh->prec = fbh->disize; break; case 23: /* RAW */ |
|