Microsoft SQL 服务器在使用 LIKE 子句时不会 return 一切

Microsoft SQL Server does not return everything when using LIKE clause

我在 SQL Server 2014 Express 中有一个 Products table,里面有记录。

部分产品名称(记录)如下:

当我执行以下查询时,一切正常:

SELECT * 
FROM Products
WHERE name LIKE 'te%'

它检索所有三个记录。但是,当我使用

SELECT * 
FROM Products
WHERE name LIKE 'tes%'

被执行,只有 "Test product" 被检索。当查询是

SELECT * 
FROM Products
WHERE name LIKE 'tesz%'

然后它再次工作,它获取所有以 "Tesz" 开头的记录。

知道问题出在哪里吗?

提前感谢您的帮助。

我下载了你的备份。

数据库排序规则设置为 Hungarian_CI_AS

Sz 在匈牙利语 (the thirty-second letter of the Hungarian alphabet) 中被视为一个独立的字母。如果你不想要这种行为,那么你需要避免匈牙利排序规则,它应该可以工作。 (我测试了名称以 CI_AS 结尾的所有 SQL Server 2014 归类,唯一显示行为的是 Hungarian_CI_ASHungarian_100_CI_ASSQL_Hungarian_CP1250_CI_AS

您可以通过更改列排序规则(首选)或向查询添加显式 COLLATE 子句(效率较低,并且会阻止诸如 WHERE name LIKE 'tes%' 之类的查询通过索引查找)。

您也可以考虑更改数据库排序规则,但这不会级联到在旧排序规则上创建的预先存在的 table 列。