4

我正在尝试在 SQL Server 2008 R2 中进行以下查询。在处理口音敏感性时,我发现了这一点:

select case when 'Наина' = '毛泽东先生' then 'Match' else 'No Match' end col

我看到的结果是:

'Match'

这种行为可能是什么原因?我也尝试过使用COLLATE不同的口音,但没有奏效。

4

1 回答 1

3

您应该NVARCHAR在比较中使用。'?????'检查后,两个字符串在使用时都转换为VARCHAR

SELECT *
FROM (VALUES
    (N'Наина', 'Наина'),
    (N'毛泽东先生', '毛泽东先生')
)t([NVACRHAR], [VARCHAR])

上述查询的结果:

NVACRHAR     VARCHAR
--------     -------
Наина        ?????
毛泽东先生    ?????

因此,为了达到预期的结果,您必须使用NVARCHAR

select 
    case 
        when 'Наина' = '毛泽东先生'  then 'Match' 
        else 'No Match' 
    end match_VARCHAR,
    case 
        when N'Наина' = N'毛泽东先生' then 'Match' 
        else 'No Match' 
    end match_NVARCHAR

编辑:我真的没有真正的解释,上面只是显示了我的测试结果。另一个答案可能会更好地解释这一点。

于 2015-07-27T01:48:11.477 回答