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

比较高棉语字符串与空字符串时,NULLIF/IIF返回异常结果求助

T-SQL高棉语字符串与空字符串比较异常的原因解析

核心问题根源:排序规则对Unicode字符的归类处理

你碰到的问题是因为SQL Server的排序规则在处理特定高棉语Unicode字符时,将这些字符归类为「空白类」字符,导致和空字符串('')比较时被判定为相等。这类字符虽然实际存在(所以LEN能统计出长度7),但在默认排序规则的比较逻辑里会被当作空白忽略。

各语句结果的逻辑拆解

  • SELECT LEN(N'ធ្វើឱ្យ') 返回7:LEN函数只统计字符串的实际字符数量,不管字符是否属于空白类,所以能准确反映真实的字符长度。
  • SELECT IIF(N'ធ្វើឱ្យ' = '', 1, 0) 返回1:默认排序规则(比如常见的SQL_Latin1_General_CP1_CI_AS)会按照字符的语义分类做比较,把你用到的高棉语字符识别为等价于空白,因此判定和空字符串相等。
  • SELECT NULLIF(N'ធ្វើឱ្យ', '') 返回NULL:这个函数的逻辑是「如果两个表达式相等则返回NULL,否则返回第一个表达式」,所以结果和上面的比较一致。

解决方法:强制使用二进制排序规则做精确比较

如果需要严格按照字符的实际内容比较,避免排序规则的干扰,可以在比较时指定二进制排序规则,比如:

-- 精确比较,返回0(表示不相等)
SELECT IIF(N'ធ្វើឱ្យ' COLLATE Latin1_General_BIN = '', 1, 0)

-- 精确匹配,返回原高棉语字符串
SELECT NULLIF(N'ធ្វើឱ្យ' COLLATE Latin1_General_BIN, '')

二进制排序规则会直接按照字符的Unicode码点逐一对比,不会对字符做归类处理,能得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:52:34