SQL排序规则(Collation)决定字符比较和排序的底层逻辑,影响大小写、重音敏感性及中文排序方式,可在列级、表达式级、数据库级和服务器级设置,高优先级覆盖低优先级。

SQL排序规则(Collation)不是ORDER BY本身,而是决定“怎么比大小”的底层设定。它影响字符比较、排序顺序、是否区分大小写和重音——这些在你用ORDER BY时悄悄起作用,但很多人直到排序结果“不对劲”才意识到问题出在这儿。
排序规则到底管什么
它不控制你写不写DESC,也不决定先排哪个字段。它管的是:
- 字母A和a算不算相等(大小写敏感:CI vs CS)
- café和cafe排在一起还是分开(重音敏感:AI vs AS)
- 中文按拼音、笔画还是Unicode码点排(如Chinese_PRC_CI_AS vs Latin1_General_CI_AS)
- 同一个查询,在不同服务器上ORDER BY 'apple'和'Apple'谁在前,可能结果相反
在哪一级可以设置
排序规则可设在四个层级,优先级从高到低:
-
列级:建表时指定,最精准。例:
name VARCHAR(50) COLLATE Chinese_PRC_CI_AS -
表达式级:查询中临时覆盖,用
COLLATE关键字。例:ORDER BY username COLLATE SQL_Latin1_General_CP1_CI_AS - 数据库级:创建DB时指定,默认影响所有新列(除非显式覆盖)
- 服务器级:安装SQL Server时定下,是整个实例的兜底规则
注意:高优先级会覆盖低优先级。比如某列设了CS(区分大小写),即使数据库是CI(不区分),该列仍按CS比对。
常见排序规则命名含义
以Chinese_PRC_CI_AS为例拆解:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~