.net学习笔记-------sqlserver 排序规则(字符集)

发布时间 2023-06-17 01:41:34作者: 三流程序媛

一、 定义

排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则。

以 ORDER BY 子句为例:如果按升序排列,说英语的人认为字符串 Chiapas 应排在 Colima 之前。但是,对于在墨西哥说西班牙语的人来说,他们会认为以 Ch 开头的单词应显示在以 C 开头的单词列表的末尾。排序规则规定了这些排序和比较规则。Latin_1 General 排序规则在 ORDER BY子句中将 Chiapas 排在 Colima 之前,而 Traditional_Spanish 排序规则将 Chiapas 排在 Colima 之后。

二、 排序规则含义

排序规则指定了表示每个字符的位模式,还指定了用于排序和比较字符的规则。排序规则的特征是区分语言、区分大小写、区分重音、区分假名以及区分全半角。

例如:

Chinese_PRC_CS_AI_WS

“Chinese_PRC_ ”指针对大陆简体字 UNICODE 的排序规则。

“_CS”是指区分大小写

“_AI”是指不区分重音

“_WS”是指区分全半角

具体请参考下列规则:

  • _BIN:指定使用向后兼容的二进制排序顺序。
  • _BIN2:指定使用 SQL Server 2005 中引入的码位比较语义的二进制排序顺序。
  • _Stroke:按笔划排序
  • _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)

更多请参考:https://learn.microsoft.com/zh-cn/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16

三、 SQL操作

1. 查看数据库支持哪些排序规则

select * from ::fn_helpcollations();

2. 查看实例排序规则

SELECT SERVERPROPERTY(N'Collation');

3. 查看数据库排序规则

SELECT name AS [DatabaseName], collation_name AS [Collation] FROM sys.databases;

4. 查看列排序规则

SELECT c.object_id, c.name, t.name, c.collation_name
FROM sys.columns c
LEFT JOIN sys.types t on t.system_type_id = c.system_type_id
WHERE  object_id=OBJECT_ID('Base_DealConcurrent');

5. 修改排序规则

根据官方文档,修改服务器排序规则需要删除所有用户数据库,然后按指定排序规则重建master数据库
以上仅做笔记,具体方法参考:https://www.cnblogs.com/larry2016/p/7641522.html