2

不幸的是,我们使用的是 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
4

2 回答 2

1

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

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

于 2011-05-14T04:31:19.533 回答
0

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

于 2014-04-08T21:33:23.560 回答