Oracle向varchar2字符串添加空字节(ASCII:0)

Oracle向varchar2字符串添加空字节(ASCII:0),oracle,asp-classic,Oracle,Asp Classic,我在使用Oracle 9i作为数据库的旧式ASP应用程序中遇到了一个奇怪的问题。我们最近让DBA将VARCHAR2字段的大小从VARCHAR2(2000)增加到VARCHAR2(4000)。问题是,即使插入的字符串大于2000个字符,也会将空字节(ASCII:0)插入字符串中的2001个字符位置。例如,如果应用程序使用2500个字符的字符串向表中插入一条新记录,那么VARCHAR2字段中将存储2501个字符,空字节将插入到2001个字符的位置。空字节不是保存到数据库的原始发布数据的一部分,这给我

我在使用Oracle 9i作为数据库的旧式ASP应用程序中遇到了一个奇怪的问题。我们最近让DBA将VARCHAR2字段的大小从VARCHAR2(2000)增加到VARCHAR2(4000)。问题是,即使插入的字符串大于2000个字符,也会将空字节(ASCII:0)插入字符串中的2001个字符位置。例如,如果应用程序使用2500个字符的字符串向表中插入一条新记录,那么VARCHAR2字段中将存储2501个字符,空字节将插入到2001个字符的位置。空字节不是保存到数据库的原始发布数据的一部分,这给我们带来了一些麻烦。你们当中有人遇到过这样的事情吗?应用程序正在使用MSDAORA ODBC驱动程序,我认为该驱动程序正在向其字符串缓冲区添加终止空字符,该缓冲区的内部限制可能为2000个字符

有什么想法吗


谢谢。

我真的不认为是甲骨文这么做的。您可以始终使用RTRIM删除insert语句中的任何空白。

使用10046跟踪级别4

alter session set events '10046 trace name context forever, level 4';
这将在服务器上创建一个跟踪文件,该文件将包含绑定值(这样您就可以看到空字节是否是被推入SQL的字符串的一部分)

是否存在任何字符集异常(例如您使用的是多字节字符集)?环境中的怪事越多,你越有可能发现bug


最后一个想法是试试CLOB而不是VARCHAR2(4000)

谢谢大家的回复。罪魁祸首是“Microsoft ODBC for Oracle”驱动程序。应用程序没有使用MSDAORA。重新配置ODBC DSN以使用Oracle 10g驱动程序修复了该问题。