使用LIKE子句时,Microsoft SQL Server不会返回所有内容

时间:2015-04-06 15:39:12

标签: sql sql-server sql-like sql-server-2014-express

我在SQL Server 2014 Express中有一个Products表,其中包含记录。

一些产品名称(记录)如下:

  • 测试产品
  • Teszttermék
  • Teszttermék2

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

SELECT * 
FROM Products
WHERE name LIKE 'te%'

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

SELECT * 
FROM Products
WHERE name LIKE 'tes%'
执行

,仅检索“测试产品”。当查询

SELECT * 
FROM Products
WHERE name LIKE 'tesz%'

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

知道问题可能是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我下载了你的备份。

数据库排序规则设置为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%'等查询)。

您可能还会考虑更改数据库排序规则,但这不会级联到旧排序规则中创建的预先存在的表列。