gotqn Asked: 2023-08-30 19:29:57 +0800 CST2023-08-30 19:29:57 +0800 CST 2023-08-30 19:29:57 +0800 CST 将高棉语与零长度字符串进行比较时,NULLIF/IIF 返回不需要的结果 772 我发现 T-SQL 语句无法将字符串设为 NULL(如果它是空字符串)。就像是: SELECT NULLIF(N'ធ្វើឱ្យ', '') -- NULL 根据谷歌翻译,这个词在高棉语中的意思是“制造” 。如果我尝试: SELECT IIF(N'ធ្វើឱ្យ' = '', 1, 0) -- 1 所以,引擎说这个字符串是空的。 我不确定这是否是支持语言问题,因为我在这里: 或某种类型的数据类型优先级转换,因为我们有两个字符串。奇怪的是,引擎怎么无法理解字符串不为空? 毕竟SELECT LEN(N'ធ្វើឱ្យ')给了我七个,只是想知道确切的原因是什么。 sql-server 1 个回答 Voted Best Answer Thom A 2023-08-30T19:56:05+08:002023-08-30T19:56:05+08:00 我假设 theNULLIF是在你的中,SELECT这是为了演示或最终消费,而不是像 theWHERE或 an 之类的东西ON(如果是,这可能是一个XY Problem)。 正如评论中提到的,拉丁语排序规则不能与非拉丁字母(或表情符号)“很好地配合”。结果,N'ធ្វើឱ្យ'和 的比较''导致它们被视为平等,尽管它们显然不是平等的。 如果您仅使用高棉语文本,我建议您将排序规则更改为高棉语排序规则(例如Khmer_100_CI_AI),但是,由于您有多种语言,因此二进制排序规则可能会更好™。然后,如果需要,您可以COLLATE将该值恢复为数据库默认值: SELECT NULLIF(N'ធ្វើឱ្យ' COLLATE Latin1_General_BIN, '') COLLATE DATABASE_DEFAULT; --ធ្វើឱ្យ SELECT IIF(N'ធ្វើឱ្យ' COLLATE Latin1_General_BIN = '', 1, 0) -- 0
我假设 the
NULLIF
是在你的中,SELECT
这是为了演示或最终消费,而不是像 theWHERE
或 an 之类的东西ON
(如果是,这可能是一个XY Problem)。正如评论中提到的,拉丁语排序规则不能与非拉丁字母(或表情符号)“很好地配合”。结果,
N'ធ្វើឱ្យ'
和 的比较''
导致它们被视为平等,尽管它们显然不是平等的。如果您仅使用高棉语文本,我建议您将排序规则更改为高棉语排序规则(例如
Khmer_100_CI_AI
),但是,由于您有多种语言,因此二进制排序规则可能会更好™。然后,如果需要,您可以COLLATE
将该值恢复为数据库默认值: