首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优势数据库、区分大小写和排序规则

优势数据库、区分大小写和排序规则
EN

Stack Overflow用户
提问于 2014-12-12 09:34:54
回答 1查看 695关注 0票数 3

在我的Advantage数据库中有一个类似的东西:-

代码语言:javascript
运行
复制
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)

当我想:-

代码语言:javascript
运行
复制
t1_x    t2_x
cheese  CHEESE

这是因为“奶酪”字符串文字变成了VARCHARFOX类型,而temp表中的列是cichar类型,因为我希望进行不区分大小写的比较。

我可以通过在比较中添加一个"COLLATE ads_default_ci“来修复这个实例,但是这很麻烦,而且我永远也记不起它的确切语法。

我认为我在数据库的列类型或配置上肯定做了一些根本错误的事情,那么如何才能做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 12:12:08

这里的问题不在于字符串文字,而是字符串文字通常表现得很好。

他们得到了辅料校对

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
select
  'CHEESE' x
from
  system.iota

我不认为有一个简单的方法可以做到这一点。

我创造了广告论坛上的上游请求

此外,我还在此基础上添加了一个特征请求。如果它得到实施,解决办法将是:

代码语言:javascript
运行
复制
select
  CICHAR'CHEESE' x
from
  system.iota

我认为这是一个干净的解决办法。

你还应该注意到一些其他的事情:

有一个排序规则与每个连接相关联

NCHAR还内置支持区分大小写的不区分大小写的排序规则.使用哪一个取决于当前连接的排序规则。

您可以使用AdsSetCollation函数为当前连接设置排序规则(或者它对您的开发环境是等效的,例如,在ARC中,您可以在连接属性中设置它)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27440632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档