带有 NCHAR 的 SQL LIKE 返回不应该返回的记录,为什么?

问题描述 投票:0回答:1

为什么第三行被返回,即使它的内容中没有 Unicode 8239(窄不间断空格)?

DECLARE @tst as TABLE
(
    col NVARCHAR(200) NOT NULL
)
INSERT INTO @tst VALUES(CONCAT(N'this',NCHAR(8239),N'is a test'))
INSERT INTO @tst VALUES(N'this' + NCHAR(8239) + N'is another test')
INSERT INTO @tst VALUES(N'thisshouldnotbereturned')
SELECT * FROM @tst WHERE col LIKE N'%' + NCHAR(8239) + N'%'

我确认前两条记录里面有 Unicode 8239 (0x202F)。第三个没有。

sql unicode sql-like nchar
1个回答
0
投票

这可能是因为您的排序规则 - 对于 Charindex 和 Like 等操作,某些排序规则会忽略这一点。

默认的英语排序规则 SQL_Latin1_General_CP1_CI_AS 的行为与此类似,但是较新的排序规则(名称中包含“100”)支持它。

例如,如果您尝试使用排序规则

Latin1_General_100_CI_AS
,它应该按预期工作。

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.