You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL_Latin1_General_CP1_CI_AS排序时撇号为何排在其他ASCII字符前

SQL_Latin1_General_CP1_CI_AS 排序不符合ASCII顺序的原因说明

该现象和撇号作为SQL字符串分隔符的语法属性完全无关,本质是SQL_Latin1_General_CP1_CI_AS这类字典排序规则与二进制排序规则的底层逻辑差异导致的。

两类排序规则的逻辑差异

  • 二进制排序规则(后缀带BIN/BIN2,比如你用到的Latin1_General_BIN):排序时直接对比字符的二进制编码值,对于ASCII范围内的单字节字符,排序结果完全与ASCII码值顺序一致,所以能得到你预期的结果。
  • SQL_Latin1_General_CP1_CI_AS属于面向自然语言的字典排序规则:它的排序逻辑不直接绑定ASCII码值,而是遵循多层级的权重判断规则:先判断字符的主要权重(基础字符差异),再判断次要权重(重音差异)、第三级权重(大小写差异),最后才判断特殊符号的权重。特殊符号的排序优先级是按照拉丁语言的日常使用习惯预设的,和ASCII码值没有必然的对应关系。

撇号的排序权重设计

在SQL_Latin1_General_CP1_CI_AS对应的拉丁字典排序规则中,撇号(')被赋予了更高的排序优先级:因为撇号大量出现在英语等拉丁语言的缩写(如don't)、名词所有格(如Jack's)场景中,规则设计时特意将它的排序优先级提到了双引号、美元符号、百分号等符号之前,所以即便它的ASCII码值(39)大于双引号的34、美元符号的36,排序时仍然会出现在这些符号的前面。


内容的提问来源于stack exchange,提问作者Doua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:06:01