一、排序规则简介:

什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中,
字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存
储和比较字符所使用的规则。"
  在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。
    select * from ::fn_helpcollations() 
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:
  Chinese_PRC_CS_AI_WS 
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则,按拼音排序。
Chinese_PRC_Stroke 表示按汉字笔画排序;
排序规则的后半部份即后缀 含义: 
  _BIN 二进制排序 
  _CI(CS) 是否区分大小写,CI不区分,CS区分(case-insensitive/case-sensitive)
  _AI(AS) 是否区分重音,AI不区分,AS区分(accent-insensitive/accent-sensitive)
  _KI(KS) 是否区分假名类型,KI不区分,KS区分(kanatype-insensitive/kanatype-sensitive)
  _WI(WS) 是否区分宽度 WI不区分,WS区分(width-insensitive/width-sensitive) 
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。

二、修改、查看排序规则:

------修改列的排序规则
ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS

------修改数据库的排序规则
ALTER DATABASE database 
COLLATE Chinese_PRC_CS_AS

------查看某个表的排序规则
select collation from syscolumns 
where id=object_id(N'yourtablename')

五、排序规则应用:

  SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则,但它的应用往往
被开发人员所忽略。其实它在实践中大有用处。

  例1:让表NAME列的内容按拼音排序:

create table #t(id int,name varchar(20))
insert #t select 1,'中'
union all select 2,'国'
union all select 3,'人'
union all select 4,'阿'

select * from #t order by name collate Chinese_PRC_CS_AS_KS_WS 
drop table #t
/*结果:
id          name                 
----------- -------------------- 
4           阿
2           国
3           人
1           中
*/

  例2:让表NAME列的内容按姓氏笔划排序:

create table #t(id int,name varchar(20))

insert #t select 1,'三'
union all select 2,'乙'
union all select 3,'二'
union all select 4,'一'
union all select 5,'十'
select * from #t order by name collate Chinese_PRC_Stroke_CS_AS_KS_WS  
drop table #t
/*结果:
id          name                 
----------- -------------------- 
4           一
2           乙
3           二
5           十
1           三
*/

三、常见问题处理:

1.“无法解决 equal to 操作的排序规则冲突。”

示例1:

create table #t1(
name varchar(20) collate Albanian_CI_AI_WS,  
value int)

create table #t2(
name varchar(20) collate Chinese_PRC_CI_AI_WS,    
value int )

表建好后,执行连接查询:

select * from #t1 A inner join #t2 B on A.name=B.name

这样,错误就出现了:

服务器: 消息 446,级别 16,状态 9,行 1
           无法解决 equal to 操作的排序规则冲突。
  要排除这个错误,最简单方法是,表连接时指定它的排序规则,这样错误就
不再出现了。语句这样写:

select * 
from #t1 A inner join #t2 B 
on A.name=B.name collate Chinese_PRC_CI_AI_WS

示例2:

例如,在创建表时考虑使用下面的 Transact-SQL 语句:

CREATE TABLE TestTab (

id int,

GreekCol nvarchar(10) COLLATE greek_ci_as,

LatinCol nvarchar(10) COLLATE latin1_general_cs_as

)

INSERT TestTab VALUES (1, N'A', N'a')

Go

该语句创建了一个包含以下两列的表:一列使用不区分大小写和区分重音的希腊语排序规则,而另一列使用区分大小写和重音的通用 Latin1 排序规则。

您可以尝试使用查询来显式比较这两列:

SELECT *

FROM TestTab

WHERE GreekCol = LatinCol

但是,该查询会返回一个错误:

Msg 446, Level 16, State 9, Server V-MICHKA3, Line 1

无法解决等于运算的排序规则冲突。

之所以会出现此错误,是因为服务器无法使用不同的排序规则来比较两段文本。但是,如果您使用 COLLATE 关键字显式创建一个允许这两列兼容的表达式,则查询将以如下方式执行:

SELECT *

FROM TestTab

WHERE GreekCol = LatinCol COLLATE greek_ci_as

还需注意的是,尽管 LatinCol 通常有一个区分大小写的排序规则,但表达式不区分大小写的排序规则会将其覆盖,从而使“A”的大写和小写被视为等同。

本文转载自CSDN文章:sqlserver排序规则介绍以及修改

sqlserver排序规则介绍以及修改相关推荐

  1. SQL sever 排序规则介绍

    一.SQL Server 排序规则后缀含义 _BIN 指定使用向后兼容的二进制排序顺序. _BIN2 指定使用 SQL Server 2005 中引入的码位比较语义的二进制排序顺序. _Stroke ...

  2. mysql 修改数据库排序规则_如何修改数据库的服务器排序规则

    展开全部 您好,很高32313133353236313431303231363533e59b9ee7ad9431333337376263兴为您解答.1.sp_helpsort SELECT SERVE ...

  3. sqlserver 排序规则(字符集)查看与修改

    一. 定义 排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则. 以 ORDER BY 子句为例:如果按升序排列,说英语的人认为字符串 Chiapas 应排在 Colima 之前 ...

  4. MySQL排序规则批量修改

    排序规则选择 mysql中utf8mb4_general_ci与utf8mb4_unicode_ci有什么区别呢? 为什么大家都使用utf8mb4_general_ci而不是utf8mb4_unico ...

  5. MS SQL 排序规则总结

    排序规则术语 什么是排序规则呢? 排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解释:在 Mic ...

  6. sql server中字符集和排序规则到底什么关系

    --SQLSERVER 中的排序规则 服务器>数据库>表列 --------------------------------- 排序规则简介 ----------------------- ...

  7. MSSQL排序规则总结

    什么是排序规则呢? 排序规则根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解释:在 Microsoft S ...

  8. MySQL 排序规则简介

    在日常工作中,对于MySQL排序规则,很少关注,大部分时候都是直接使用字符集默认的排序规则,常常忽视了排序规则的细节问题,了解排序规则有助于更好的理解MySQL字符比较和排序相关的知识 简述 说起排序 ...

  9. mysql的查询排序规则_mysql 如何查看数据库字符集和排序规则

    查看数据库编码 (即字符集) show create database 数据库名; 查看数据表编码 (即字符集) show create table user 查看数据表全部字段排序规则 (即utf8 ...

  10. 无法解决 equal to 运算中 “Chinese_PRC_CI_AI_KS_WS“ 和 “Chinese_PRC_CI_AS“ 之间的排序规则冲突

    在执行sql查询中遇到了如下错误: 无法解决 equal to 运算中 "Chinese_PRC_CI_AI_KS_WS" 和 "Chinese_PRC_CI_AS&qu ...

最新文章

  1. 如何使用htmlq提取html文件内容
  2. SAP HANA中的存储过程(sql procedure)
  3. HDU 3046 Pleasant sheep and big big wolf 最小割
  4. Java Spring log源代码学习
  5. oracle dba 手动创建数据实例
  6. django给mysql配主从_django中的mysql主从读写分离:一、配置mysql主从分离
  7. python冒泡排序原理_如何实现python冒泡排序算法?
  8. eclipse中JPA插件的安装与使用
  9. C# 获得Excel工作簿Sheet页面(工作表)集合的名称
  10. c++ 实现outlook itemsend_2021智能C端冬季科创训练营作业已发布,请注意查收~
  11. 2015.12.21 内存管理(memory management)
  12. 尚硅谷大数据技术之Sqoop
  13. python抽签代码,python:选房抽签小工具
  14. Firemonkey
  15. oracle数据库修改密码方法,修改oracle数据库用户名及密码的方法
  16. 计算机考研复试笔试题库,苏州大学计算机考研复试真题和复试参考书目
  17. kali利用fluxion无线网络钓鱼
  18. 【整数规划算法】分支定界法及其Python代码实现
  19. ar5418无线网卡驱动
  20. Android Studio通过模拟器联网

热门文章

  1. iOS源码资源之各种项目源码汇总
  2. 微俱聚平台更新日志jquery时间轴特效
  3. CODEVS 1746 贪吃的九头龙
  4. 【QNX Hypervisor 2.2 用户手册】1.3 QNX hypervisor架构
  5. java与c互通aes加密解密
  6. 软件体系结构描述语言与建模实验描述c2软件体系结构风格,软件体系结构描述语言.pdf...
  7. sum在mysql是什么意思_数据库中Count是什么意思和SUM有什么区别
  8. beats android 蓝牙连接电脑,beatsx怎么连接电脑_Beats X耳机连接win10电脑的详细操作步骤...
  9. 错误记录:FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecate
  10. svg格鲁特动画代码