SQL Server的排序规则(collation)冲突和解决方案

SQL Server的排序规则(collation)冲突和解决方案,第1张

概述什么是排序规则(collation)关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多。 这些排序规则有什么作用呢?让我们先来看看MS…

什么是排序规则(collation)

关于sql Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多。

这些排序规则有什么作用呢?让我们先来看看MS官方的解释:

排序规则指定了表示每个字符的位模式。它还指定了用于排序和比较字符的规则。排序规则具有下面的特征:

语言
区分大小写
区分重音
区分假名
比如在sql Server 2005中,排序规则名称由两部份构成,比如 Chinese_PRC_CI_AI_WS
前半部份是指本排序规则所支持的字符集,如Chinese_PRC 指针对大陆简体字UNICODE的排序规则。
后半部份即后缀的含义如下:

_BIN               
指定使用向后兼容的二进制排序顺序。
_BIN2      指定使用 sql Server 2005 中引入的码位比较语义的二进制排序顺序。
_stroke   按笔划排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_WI(WS) 是否区分全半角,WI不区分,WS区分

既然排序规则如此复杂,那么应用了不同排序规则的列之间默认情况下便不能进行Union、Join、like等equal *** 作了,于是便有了排序规则(collation)冲突

排序规则(collation)冲突。

我们知道,sql Server 从2000 开始,便支持多个排序规则。sql Server 2000 的数据库可使用除默认排序规则以外的其他排序规则。此外,sql Server 2000 还支持为列专门制定排序规则。

这样一来,我们在写跨表、跨数据库、跨服务器 *** 作的T-sql时,如果equal的字段排序规则不同,便会发生排序规则冲突。

比如我们先见两个结构相同的表,但字段的排序规则不同:

-- 1. Create tableA.
CREATE table TagstableA
(
Tagname NVARCHAR(64) ColLATE Chinese_PRC_BIN
)
-- 2. Create tableB.
CREATE table TagstableB
(
Tagname NVARCHAR(64) ColLATE Chinese_PRC_CI_AS
)

当表建好之@R_502_6915@:

-- 3. Try to join them
SELECT * from TagstableA A INNER JOIN TagstableB B on A.Tagname = B.Tagname

便会出下类似下面的问题:

无法解决 equal to *** 作中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。 总结

以上是内存溢出为你收集整理的SQL Server的排序规则(collation)冲突和解决方案全部内容,希望文章能够帮你解决SQL Server的排序规则(collation)冲突和解决方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1158135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存