2010-09-15 38 views
3

我有一个简单的表:过滤Unicode列 - 以大量的数据匹配

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL) ON [PRIMARY] 

两行:

Paweł 
Pawel 

发行以下的select语句:

SELECT *, CAST(Surname AS VARBINARY(30)) AS Expr1, CAST(N'Paweł' AS VARBINARY(30)) AS Expr1 
FROM Users WHERE Surname = N'Paweł' 

得出以下结果:

Paweł 0x50006100770065004201 0x50006100770065004201 
Pawel 0x50006100770065006C00 0x50006100770065004201 

具有值'Pawel'的行即使不等于'Paweł'(二进制列显示它),也会返回。

任何想法是怎么回事,在这种情况下,SQL Server如何考虑Pawel =Paweł?

谢谢你,帕维尔

回答

3

你的排序规则是不区分重音:Latin1_General_CI_AI

尝试是这样的:

select 1 where N'Pawel' = N'Paweł' collate Latin1_General_100_CI_AS 

返回Nothing预期。

3

整理中的“AI”代表“Accent Insensitive”。要区分这两者,你会想用“AS”代替“Accent Sensitive”:Latin1_General_CI_AS