【发布时间】: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 数据类型是否存在其他已知问题?
任何帮助将不胜感激。谢谢。
[更新]
我找到了这个错误的原因。有两点需要澄清。
- 数据库的版本为 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
【问题讨论】:
标签: sql case-insensitive advantage-database-server isnull