MSSQL Server 排序规则详解
2013-05-30 16:28
89 查看
什么是排序规则(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区分 |
COLLATE DATABASE_DEFAULT
Collate XXX操作可以用在字段定义或使用时,它会将字段定义或转换成XXX的排序规则格式。而Collate Database_Default则会将字段定义或转换成当前数据库的默认排序规则,从而解决冲突。比如在下面的代码中便使用了Collate Database_Default来解决字段在equal操作中的排序规则冲突:Insert into Security.Report (Name) Select C.Path From SSRS.Catalog C Where C.Path Collate Database_Default Like @ReportPath + '/%' And C.Path Collate Database_Default Not In (Select Name From Security.Report R)当然,在创建临时表时若对字段定义加上Collate Database_Default,也可以方便地解决潜在的排序规则冲突,比如上一节中提到的存储过程,只要做如下修改即可。
-- 1. Create Temp Table. CREATE TABLE #TagsTable ( TagName NVARCHAR(64) COLLATE DATABASE_DEFAULT )
结束语
对于专业的SQLer来说,排序规则的应用场景还有很多,例如利用排序规则特点计算汉字笔划和取得拼音首字母等等,更多信息,请查阅MSDN文档:http://msdn.microsoft.com/zh-cn/library/aa258237(en-us,SQL.80).aspx谢谢!作者:Lance Zhang(Lance Zhang's Tech Blog)出处:http://blodfox777.cnblogs.com/相关文章推荐
- SQL server排序规则后缀详解
- SQL Server排序规则详解
- oracle数据库的完整性约束规则详解
- zabbix网络发现规则配置实战/详解(83)
- JavaScript中数组Array.sort()排序方法详解
- 30个Oracle语句优化规则详解
- 详解Javascript数据类型的转换规则
- jQuery.validator 验证规则详解
- Nginx之location 匹配规则详解
- js数组的sort排序详解
- 无法解决 equal to 操作中的 **** 和 *******排序规则冲突
- 动态规则问题详解(四)
- Hadoop Mapreduce分区、分组、二次排序过程详解
- 详解Yii2.0 rules验证规则集合
- STL sort排序方法详解
- sesearch命令_Linux sesearch 命令用法详解:查询SELinux策略的规则详情
- 数组排序中NSSortOptions两个参数详解(NSSortConcurrent、NSSortStable)
- 学习MSSQL2005笔记5--大小写和排序规则
- SqlServer无法解决 equal to 运算中排序规则冲突
- ESLint 规则详解(一)