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

为何Azure SQL认为下划线处于空格与'ZZZZZ'的排序区间内

Azure SQL下划线范围查询返回结果的成因说明

这个现象不是Azure SQL的缺陷,核心差异来源于排序规则(Collation)的字符比较逻辑设置,具体原因如下:

  • 字符串比较的判断规则完全由当前会话/字段/数据库生效的排序规则决定,不同排序规则对特殊字符的排序权重、大小写/重音敏感策略、符号优先级的定义存在明显差异:
    • 常规本地SQL Server默认使用旧版SQL排序规则、Oracle默认使用基于二进制码值的排序规则,会严格按照ASCII码值做比较:下划线_的ASCII码为95,大写字母Z的ASCII码为90,因此'_' > 'Z',自然不满足BETWEEN ' ' AND 'ZZZZZZZ'的条件,不会返回任何结果。
    • Azure SQL默认采用新版Windows排序规则(如Latin1_General_100_CI_AS),这类排序规则是按照自然语言使用习惯设计排序优先级,下划线这类非字母符号的排序优先级排在所有英文字母之前,因此此时'_' < 'Z',满足范围查询条件,就会返回结果。
  • 你可以通过以下操作验证逻辑、对齐其他数据库的执行结果:
    1. 执行以下语句查看当前数据库的生效排序规则:
      SELECT name, collation_name FROM sys.databases WHERE name = DB_NAME();
      
    2. 如果需要和本地SQL Server/Oracle的执行结果对齐,可在查询时强制指定二进制排序规则即可得到无返回的结果:
      SELECT * FROM table WHERE '_' COLLATE Latin1_General_BIN BETWEEN ' ' AND 'ZZZZZZZ'
      
    也可以根据业务需要,修改对应查询字段的排序规则,统一全局的字符比较逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:03