使用LIKE子句时的Microsoft SQL Server不返回的一切(Microsoft SQL

2019-10-22 12:20发布

我有一个Products表中的SQL Server 2014点快速与它的记录。

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

  • 测试产品
  • 测试产品
  • 测试产品2

当我执行以下查询,一切都工作得很好:

SELECT * 
FROM Products
WHERE name LIKE 'te%'

它会检索所有三个记录。 然而,当我使用

SELECT * 
FROM Products
WHERE name LIKE 'tes%'

执行时,只有“试验品”进行检索。 而当查询

SELECT * 
FROM Products
WHERE name LIKE 'tesz%'

然后它再次,它获取开始“TESZ”的所有记录。

任何想法,问题可能是什么?

感谢您的帮助提前。

Answer 1:

我下载了你的备份。

数据库排序规则设置为Hungarian_CI_AS

SZ被视为在自己的权利在匈牙利的一封信( 匈牙利语字母表的第三十二字母 )。 如果你不希望这种行为,那么你需要避免匈牙利排序规则,它应该工作。 (我测试了所有的SQL Server 2014页的排序规则与结尾的名称CI_AS和展示的行为,仅仅是Hungarian_CI_ASHungarian_100_CI_ASSQL_Hungarian_CP1250_CI_AS

你可以通过改变列排序规则(优选)或通过添加显式执行此COLLATE子句到查询(效率较低,并且将阻塞的查询,如WHERE name LIKE 'tes%'正在通过一个索引解决寻求)。

你也可以考虑更改数据库的整理,但是这不会通过级联到预先存在的旧整理创建的表列。



文章来源: Microsoft SQL Server does not return everything when using LIKE clause