2009-06-03 92 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)