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

为何T-SQL中select 1 where '{' < 'a'会返回结果?ASCII值不符预期

T-SQL中'{' < 'a'返回结果的原因

这事儿的核心原因是T-SQL的字符串比较不依赖单纯的ASCII数值,而是由数据库当前使用的排序规则(Collation)决定。

  • 你说的ASCII值没错:{的ASCII码是123,a是97,纯比数值确实123更大,但字符串比较的逻辑和单纯的数字比较完全不同。
  • 比如SQL Server默认的SQL_Latin1_General_CP1_CI_AS这类排序规则里,字符的排序优先级不是严格按ASCII码排列的。实际这个规则下,{的排序权重低于小写字母a,所以'{' < 'a'会被判定为真,返回结果。
  • 而'b' < 'a'返回空结果,是因为小写字母的排序顺序本身就是a < b < c...,符合常规预期。

你可以用COLLATE关键字强制指定排序规则来验证:

-- 使用二进制排序规则,严格按ASCII数值比较,此时'{'更大,返回空结果
SELECT 1 WHERE '{' < 'a' COLLATE SQL_Latin1_General_CP437_BIN

-- 使用默认的不区分大小写排序规则,会返回结果
SELECT 1 WHERE '{' < 'a' COLLATE SQL_Latin1_General_CP1_CI_AS

总结:字符串比较的结果由排序规则主导,要是需要严格按ASCII数值比较,直接用带BIN或BIN2后缀的二进制排序规则就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:40:48