在我的Advantage数据库中有一个类似的东西:-
drop table #test;
create table #test (x cichar(50));
insert into #test (x) values ('cheese');
insert into #test (x) values ('fromage');
insert into #test (x) values ('Queso');
select
t1.x t1_x,
t2.x t2_x
from
#test t1
inner join
(
select
'CHEESE' x // String literal will be of type VARCHARFOX
from
system.iota
) t2
on t1.x=t2.x
这给了我一个信息:-
poQuery: Error 7200: AQE错误: State = HY000;NativeError = 2213;iAnywhere解决方案对具有不同排序规则的字符串进行无效的比较或操作。 **脚本错误信息:-- SQL语句中的错误位置为: 137 (行:5列: 1)
当我想:-
t1_x t2_x
cheese CHEESE
这是因为“奶酪”字符串文字变成了VARCHARFOX类型,而temp表中的列是cichar类型,因为我希望进行不区分大小写的比较。
我可以通过在比较中添加一个"COLLATE ads_default_ci“来修复这个实例,但是这很麻烦,而且我永远也记不起它的确切语法。
我认为我在数据库的列类型或配置上肯定做了一些根本错误的事情,那么如何才能做到这一点呢?
发布于 2014-12-12 12:12:08
这里的问题不在于字符串文字,而是字符串文字通常表现得很好。
他们得到了辅料校对
TRY drop table #test; CATCH ALL END TRY;
create table #test (x cichar(50));
insert into #test (x) values ('cheese');
insert into #test (x) values ('fromage');
insert into #test (x) values ('Queso');
select
t1.x t1_x,
'CHEESE' t2_x
from
#test t1
where
t1.x='CHEESE'
问题在于您正在引入派生表,并且ADS引擎确定派生表字段的数据类型为VARCHARFOX(6)
。
select
'CHEESE' x
from
system.iota
我不认为有一个简单的方法可以做到这一点。
我创造了广告论坛上的上游请求。
此外,我还在此基础上添加了一个特征请求。如果它得到实施,解决办法将是:
select
CICHAR'CHEESE' x
from
system.iota
我认为这是一个干净的解决办法。
你还应该注意到一些其他的事情:
有一个排序规则与每个连接相关联。
NCHAR还内置支持区分大小写的和不区分大小写的排序规则.使用哪一个取决于当前连接的排序规则。
您可以使用AdsSetCollation函数为当前连接设置排序规则(或者它对您的开发环境是等效的,例如,在ARC中,您可以在连接属性中设置它)。
https://stackoverflow.com/questions/27440632
复制相似问题