【问题标题】:Oracle adds NULL Byte (ASCII: 0) to varchar2 stringOracle 将 NULL Byte (ASCII: 0) 添加到 varchar2 字符串
【发布时间】:2010-10-31 00:14:41
【问题描述】:

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

有什么想法吗?

谢谢。

【问题讨论】:

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

标签: oracle asp-classic


【解决方案1】:

我真的不认为是 ORACLE 在这样做。您始终可以使用 RTRIM 删除插入语句中的任何空白。

【讨论】:

    【解决方案2】:

    寻找 10046 跟踪级别 4

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

    这将在服务器上创建一个包含绑定值的跟踪文件(因此您可以查看空字节是否是被推入 SQL 的字符串的一部分)。

    是否有任何奇怪的字符集(例如,您使用的是多字节字符集)?环境中的怪事越多,您发现错误的可能性就越大。

    最后的想法是尝试使用 CLOB 而不是 VARCHAR2(4000)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      相关资源
      最近更新 更多