4

亲爱的朋友们,我遇到了一个从未想过的问题。我的问题似乎太简单了,但我找不到解决方案。我有一个 NVarchar 类型的 sql server 数据库列,并用标准波斯字符填充。当我尝试对其运行包含 LIKE 运算符的非常简单的查询时,结果集变为空,尽管我知道查询项存在于表中。这是一个非常简单的示例查询,它的行为并不正确:SELECT * FROM T_Contacts WHERE C_ContactName LIKE '%ف%'

ف 是一个波斯字符,ContactName 列包含多个包含该字符的条目。

请告诉我应该如何重写表达式或应该应用什么更改。请注意,我的数据库的排序规则是 SQL_Latin1_General_CP1_CI_AS。

非常感谢

4

2 回答 2

6

此外,如果这些值存储为NVARCHAR(我希望它们是!!),则应始终使用N'..'任何字符串文字的前缀,以确保不会将任何不需要的转换回 non-Unicode VARCHAR

所以你应该搜索:

SELECT * FROM T_Contacts 
WHERE C_ContactName COLLATE Persian_100_CI_AS LIKE N'%ف%'
于 2011-01-15T09:27:16.417 回答
3

不应该是:

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

即,N在比较字符串的前面,所以它把它当作一个nvarchar

于 2011-01-15T09:26:45.250 回答