【问题标题】:Filtering unicode column in Sql server 2005 - to much data match过滤 Sql server 2005 中的 unicode 列 - 与大量数据匹配
【发布时间】:2010-09-15 21:32:55
【问题描述】:

我有一张简单的桌子:

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

有两行:

Paweł
Pawel

发出以下选择语句:

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 服务器在这种情况下如何认为 Pawel = Paweł?

谢谢,帕维尔

【问题讨论】:

    标签: .net sql sql-server tsql encoding


    【解决方案1】:

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

    试试这样的:

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

    没有按预期返回任何内容。

    【讨论】:

      【解决方案2】:

      您的排序规则中的“AI”代表“不区分口音”。为了区分这两者,您需要使用“AS”代替“Accent Sensitive”:Latin1_General_CI_AS

      【讨论】:

        猜你喜欢
        • 2011-03-07
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        相关资源
        最近更新 更多