2014-12-03 40 views
11

我們的一位QA工程師的偶然發現這一個:SQL Server搜索「ὡ」(U + 1F61)是否匹配全部?

SELECT DisplayName 
    FROM Products 
    WHERE (DisplayName LIKE N'%ὡ%') 

此查詢相匹配,即使他們沒有包含「ὡ」(U + 1F61)的顯示名稱值的100%。 DisplayName是nvarchar(max)。我們希望防止這種情況發生。思考?

+3

不管是什麼,它是在[SQL小提琴]完全可再現(http://sqlfiddle.com/#!6/d41d8/23189):'選擇1 N'abc'像N'%ὡ%''爲SQL Server 2012返回'1'。 – hvd 2014-12-03 21:57:48

+0

@hvd對於它的地獄,我試着在SQL小提琴上查詢,但用Postgres ..它似乎沒有返回'1' – 2014-12-03 22:05:10

+1

似乎是[排序問題](http://sqlfiddle.com/#!6/d41d8/23193)。 – Blorgbeard 2014-12-03 22:09:02

回答

5

是的,看起來像馬丁史密斯是正確的關於100整理組。下面的例子(試穿2014)證明:

declare @t table (
    ValueSQL nvarchar(20) collate SQL_Latin1_General_CP1_CI_AS, 
    ValueWin nvarchar(20) collate Latin1_General_CI_AS, 
    ValueWin100 nvarchar(20) collate Latin1_General_100_CI_AS 
); 

insert into @t 
select 'Abc', 'Abc', 'Abc'; 

SELECT case when t.ValueSQL like N'ὡ%' then t.ValueSQL end as [MatchSQL], 
    case when t.ValueWin like N'ὡ%' then t.ValueWin end as [MatchWin], 
    case when t.ValueWin100 like N'ὡ%' then t.ValueWin100 end as [MatchWin100] 
FROM @t t; 
+0

感謝您的確認和示例。 – cpk 2014-12-03 23:45:25