Оператор SQL LIKE не работает с азиатскими языками (SQL Server 2008)

Дорогие друзья, я столкнулся с проблемой, о которой никогда не думал. Моя проблема кажется слишком простой, но я не могу найти ее решение. У меня есть столбец базы данных сервера sql, который имеет тип NVarchar и заполнен стандартными персидскими символами. когда я пытаюсь выполнить на нем очень простой запрос, который включает оператор LIKE, набор результатов становится пустым, хотя я знаю, что термин запроса присутствует в таблице. Вот очень простой пример запроса, который работает некорректно: SELECT * FROM T_Contacts WHERE C_ContactName LIKE '%ف%'

ف — персидский символ, и столбец ContactName содержит несколько записей, содержащих этот символ.

Скажите, пожалуйста, как мне переписать выражение или какое изменение следует применить. Обратите внимание, что сопоставление моей базы данных — SQL_Latin1_General_CP1_CI_AS.

Большое спасибо


person Farshid    schedule 15.01.2011    source источник


Ответы (2)


Кроме того, если эти значения хранятся как NVARCHAR (на что я надеюсь!!), вы должны всегда использовать префикс N'..' для любых строковых литералов, чтобы избежать нежелательных преобразований обратно в не-Юникод VARCHAR.

Итак, вы должны искать:

SELECT * FROM T_Contacts 
WHERE C_ContactName COLLATE Persian_100_CI_AS LIKE N'%ف%'
person marc_s    schedule 15.01.2011

Разве не должно быть:

 SELECT * FROM T_Contacts WHERE C_ContactName LIKE N'%ف%'

т. е. с N перед сравниваемой строкой, поэтому она обрабатывается как nvarchar?

person veljkoz    schedule 15.01.2011