2009-06-03 7 views
0

データベースとしてOracle 9iを使用する従来のASPアプリケーションで奇妙な問題が発生しました。最近、DBAにVARCHAR2フィールドのサイズをVARCHAR2(2000)からVARCHAR2(4000)に増加させました。問題は、挿入された文字列が2000文字を超えていても、NULLバイト(ASCII:0)が文字列の2001文字位置に挿入されることです。たとえば、アプリケーションが新しい文字列を2500文字の文字列で表に挿入すると、2501文字がVARCHAR2フィールドに格納され、NULLバイトが2001文字位置に挿入されます。 NULLバイトは、データベースに保存されたオリジナルの投稿データの一部ではなく、私たちに悲しみを引き起こしています。あなたの誰かがこのような何かを見つけましたか?アプリケーションがMSDAORA ODBCドライバを使用していて、ドライバがNULL文字を文字列バッファに追加していると考えています。には2000文字の内部制限があります。Oracleはvarchar2文字列にNULLバイト(ASCII:0)を追加します

アイデア?

ありがとうございました。

+0

お返事ありがとうございます。原因は「Oracle for Microsoft ODBC」ドライバでした。アプリはMSDAORAを使用していませんでした。 Oracle 10gドライバを使用するようにODBC DSNを再設定すると、問題が解決されました。 –

答えて

0

私は本当にそれがオラクルだとは思わない。 RTRIMを使用して、挿入ステートメントの空白を削除することができます。

0

バインド値が含まれます、サーバー上のトレースファイルが作成されます10046トレースレベル4

alter session set events '10046 trace name context forever, level 4'; 

のために行く(あなたがNULLバイトが文字列の一部であるかどうかを見ることができるに押されSQL)。

文字セットが奇妙です(マルチバイト文字セットを使用していますか?)。環境が奇妙になればなるほど、バグを見つける可能性は高くなります。

最後の考えは、VARCHAR2(4000)の代わりにCLOBを試すことです

関連する問題