美文网首页
SQL Server 排序规则

SQL Server 排序规则

作者: cebdba | 来源:发表于2017-02-22 21:01 被阅读0次

    初遇这个名词,小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)

    相关文章

      网友评论

          本文标题:SQL Server 排序规则

          本文链接:https://www.haomeiwen.com/subject/awgmwttx.html