不幸的是,我们使用的是 Advantage Database Server Torture Edition 8.1 版。在我完成我的项目后,我听说数据库被配置为区分大小写。所以我把表结构,所有Char数据类型都改成了CIChar,这是一个不区分大小写的char字段。但是在执行我的程序时出现此错误:
Advantage.Data.Provider.AdsException:
错误 7200:AQE 错误:状态 = HY000;本机错误 = 2214; [扩展系统][优势 SQL 引擎]无效强制:表达式的结果是不明确的字符类型。
我发现 ISNULL(myciChar,'') 导致了这个问题,但我不明白,为什么?我该如何解决这个问题?cichar 数据类型还有其他已知问题吗?
任何帮助将不胜感激。谢谢。
[更新]
我找到了这个错误的原因。有两点需要澄清。
- 数据库有 8.1 版,但数据架构师有 7.1 版,在本地模式下它需要架构师引擎 7.1 版。这意味着这是一个 v7.1 问题。
- isnull 函数中的第二个参数在 7.1 版中是默认区分大小写的排序规则,而我的列 mytext 是 cichar,这是不明确的字符类型。因此,如果有人遇到同样的问题,它将在 v7.1 中使用 collate 声明:
适用于 v7.1:
select myid, isnull(mytext, '-' COLLATE ads_default_ci) as mytext from mytable
v7.1 中的错误:
select myid, isnull(mytext, '-') as mytext from mytable