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