"Chinese_PRC_CI_AS"报错处理
金蝶云社区-云社区用户39qg0408
云社区用户39qg0408
1人赞赏了该文章 832次浏览 未经作者许可,禁止转载编辑于2015年07月16日 14:05:52

运行EAS的时候,我遇到过报如下错误的信息两次:
错误详细堆栈信息:com.kingdee.bos.dao.ormapping.SQLAccessException: select data error.无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AS" 之间的排序规则冲突。
经检查发现,t_org_oupartadmin 表新增的字段 fareaid 排列规则为 Chinese_PRC_CS_AS ,而其他字段以及数据库设置的均为 Chinese_PRC_CI_AS。
解决方法:执行SQL语句, alter table t_org_oupartadmin alter COLUMN fareaid varchar(44) collate Chinese_PRC_CI_AS 。

Chinese_PRC_CS_AS 这个是什么东西呢,
Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中, 字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。"
 在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。select * from ::fn_helpcollations()

后半部份即后缀 含义:
  _BIN 二进制排序
  _CI(CS) 是否区分大小写,CI不区分,CS区分
  _AI(AS) 是否区分重音,AI不区分,AS区分   
  _KI(KS) 是否区分假名类型,KI不区分,KS区分 
_WI(WS) 是否区分宽度 WI不区分,WS区分 

下面附两个SQL语句查询,可以比对结果了解排序

select * from (
select 'abcDEF123aBc' as a
union all
select 'abc' as a
union all
select 'ABC' as a
) as t
where a COLLATE Chinese_PRC_Cs_AS like '%[a-z]%'

select * from (
select 'abcDEF123aBc' as a
union all
select 'abc' as a
union all
select 'ABC' as a
) as t
where a COLLATE Chinese_PRC_BIN like '%[a-z]%'