2015-07-27 6 views
2

Я пытаюсь выполнить следующий запрос в SQL Server 2008 R2. Работая с чувствительностью акцент я нашел это:SQL Collate statement where where

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

Я вижу результат:

'Match'

Что могло быть возможно быть причина такого поведения? Я также пробовал использовать COLLATE с разными акцентами, но это не сработало.

ответ

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 

Edit: Reall Я не» у меня есть реальное объяснение, приведенное выше показывает результат моего тестирования. Другой ответ может объяснить это лучше.

+0

Предлагаю вам задать другой вопрос. Я не очень-то знаком с linq. –

+0

получил эту обновленную модель сущности. –