2009-06-03 90 views
0

我對使用Oracle 9i作爲其數據庫的傳統ASP應用程序遇到了一個奇怪的問題。我們最近讓DBA將VARCHAR2字段的大小從VARCHAR2(2000)增加到VARCHAR2(4000)。問題是即使插入的字符串大於2000個字符,也會在字符串中的2001字符位置插入NULL字節(ASCII:0)。例如,如果應用程序用2500個字符的字符串向表中插入新記錄,則2501個字符存儲在VARCHAR2字段中,NULL字符插入到2001字符位置。 NULL字節不是保存到數據庫的原始發佈數據的一部分,並且正在導致我們一些悲傷。你們有沒有遇到過這樣的事情?該應用程序正在使用MSDAORA ODBC驅動程序,並且我在考慮驅動程序正在向其字符串緩衝區添加終止空字符,其中可能的內部限制爲2000個字符。Oracle將NULL字節(ASCII:0)添加到varchar2字符串

任何想法?

謝謝。

+0

感謝大家的回覆。罪魁禍首是「用於Oracle的Microsoft ODBC」驅動程序。該應用程序未使用MSDAORA。重新配置ODBC DSN以使用Oracle 10g驅動程序解決了該問題。 – 2009-06-17 13:58:22

回答

0

我真的不認爲這是ORACLE那樣做的。您始終可以使用RTRIM刪除插入語句中的任何空格。

0

走了10046跟蹤級別4

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

這將創建包含綁定值在服務器上的一個跟蹤文件(這樣你就可以看到是否空字節字符串的一部分被推入SQL)。

是否有任何字符集怪異(例如,你使用多字節字符集)?環境中的怪事越多,你就越有可能找到一個bug。

最後想到的是嘗試使用CLOB而不是VARCHAR2(4000)