【问题标题】:Advantage Database Server (ADS) CIChar data type ISNULLAdvantage 数据库服务器 (ADS) CIChar 数据类型 ISNULL
【发布时间】:2011-05-13 13:49:27
【问题描述】:

不幸的是,我们使用的是 Advantage Database Server Torture Edition 8.1 版。 完成项目后,听说数据库配置为区分大小写。所以我把表结构,所有Char数据类型都改成了CIChar,这是一个大小写不敏感的char字段。但是我在执行我的程序时遇到了这个错误:

Advantage.Data.Provider.AdsException:

错误 7200:AQE 错误:状态 = HY000;本机错误 = 2214; [扩展系统][优势 SQL 引擎]无效强制:结果 表达式是一个模棱两可的字符 输入。

我发现是 ISNULL(myciChar,'') 导致了这个问题,但我不明白,为什么? 我该如何解决这个问题? cichar 数据类型是否存在其他已知问题?

任何帮助将不胜感激。谢谢。

[更新]

我找到了这个错误的原因。有两点需要澄清。

  1. 数据库的版本为 8.1,但数据架构师的版本为 7.1,在本地模式下,它采用架构师引擎的版本 7.1。这意味着这是一个 v7.1 问题。
  2. isnull 函数中的第二个参数在 7.1 版中默认区分大小写,而我的列 mytext 是 cichar,这是不明确的字符类型。因此,如果有人遇到同样的问题,它可以在 v7.1 中使用 collat​​e 声明:

适用于 v7.1:

select myid, isnull(mytext, '-' COLLATE ads_default_ci) as mytext from mytable

v7.1 中的错误:

select myid, isnull(mytext, '-') as mytext from mytable

【问题讨论】:

    标签: sql case-insensitive advantage-database-server isnull


    【解决方案1】:

    可能需要查看更多表情来告诉您为什么会收到此错误。它与 ISNULL 的关系不如它与使用 ISNULL 的表达式的关系那么大。引擎可能遇到了比较,并且无法自动确定您是否希望比较区分大小写。请参阅the documentation,其中描述了不区分大小写的优先级和强制。

    如果没有在表达式中使用,它可能只是一个错误(我刚刚尝试使用 10.1 并且它有效),请确认您使用的是 8.1 的最新版本,即 8.10.0.38

    【讨论】:

      【解决方案2】:

      我认为版本 7 不支持 cichar 数据类型,版本 6 肯定不支持。我使用的是版本 6,然后直接升级到 8,发现一切都适用于版本 6 客户端驱动程序,直到我使用 cichar 数据类型,然后 Advantage 游戏结束了。然后我不得不将所有客户端更新到与服务器相同的版本。最好保持所有版本相同。

      【讨论】:

        猜你喜欢
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多