OTN Japan - 404 Error
こりゃまた,器用な制限事項を...
えーと,結論から言えばドライバ依存の問題なので,Oracle JDBC Thinドライバの10.1.0.4.0以上を使っていれば特に気にすることはない(試した限りにおいては,9.2.0以前のドライバを使うと,この現象が再現した)。
この現象ってのは,
- UTF8以外の文字コードを使っているOracle DBのVARCHAR2のフィールドに対して,
- 666文字以上の全角文字をPreparedStatemet#setString()やsetObject()で代入すると,
- VARCHAR2の文字数制限(2000バイト)に引っかかる。
ってやつ。なに?この微妙に香ばしい不具合仕様。
しかもこれ,VARCHAR2に割り当てたバイト数がどうこう以前に「そもそもVARCHAR2に代入可能かどうか?」っつうチェックで弾いているっぽい。実際のとこ,VARCHAR2(10)みたいなフィールドに「あいうえお」ってピッタリ入るし。
なお,ドライバを変更できない場合の回避策は,setString()やsetObject()ではなくsetCharacterStream()を使うだそうだ。
→VARCHAR2 に2000バイトをINSERTしてこける問題について