初遇这个名词,小D内心真的是迷茫的,排序规则单纯是升序降序这个意思吗?其实,这和Oracle里面的字符集
含义是相同的。
SQL Server支持多语言环境,在SQL Server中,字符集被称为排序规则(Collation)。排序规则不仅影响记录行的sort顺序,还影响中文显示是否乱码等。在SQL Server中,排序规则可在服务器级别、数据库级别以及表列级别设置。
在SQL Server软件安装时我们可设置服务器级别的排序规则,若在创建数据库时我们未指定排序规则,数据库则会继承实例的排序规则,而表中的列默认是继承数据库的排序规则(除非在创建表时指定列的排序规则)。
通过以下命令分别查看不同级别下的排序规则:
数据库级别:SELECT SERVERPROPERTY(N'Collation')
数据库级别:SELECT name, collation_name FROM sys.databases WHERE name = N'mydb';
表列级别:SELECT name, collation_name FROM sys.columns
由于SQL Server的排序规则只影响字符型的列,如char, varchar, text, nchar, nvarchar, ntext,因此视图sys.columns中非字符型的排序规则显示为NULL。
小D笔记:
在安装SQL Server时,你可能困惑应该选择哪种字符集,官方是这么说的
推荐使用SQL Server的字符集,而非Windows的字符集。原因在于SQL Server字符集是基于Windows衍生出来的,同时保证了SQL Server版本间的兼容性。
综上述,我们应尽可能的正确设置SQL Server排序规则:
- 1 正确的设置SQL Server排序规则 ,推荐使用Chinese_PRC_CI_AS排序规则。
- 2 尽可能多使用nvarchar等Unicode类型,而非varchar类型。
由此只需保持SQL Server中服务器、数据库、表列三个级别的排序规则设置一致即是正确的使用方式。
科普贴
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:
Chinese_PRC_CI_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)
- _WI(WS) 是否区分宽度,WI不区分,WS区分(width-insensitive/width-sensitive)
网友评论