Оператор SQL LIKE не работает с азиатскими языками (SQL Server 2008) - PullRequest
4 голосов
/ 15 января 2011

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 15 января 2011

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

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

SELECT * FROM T_Contacts 
WHERE C_ContactName COLLATE Persian_100_CI_AS LIKE N'%ف%'
3 голосов
/ 15 января 2011

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

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

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

...