SQL LIKE运算符不适用于亚洲语言(SQL Server 2008)

时间:2011-01-15 08:40:17

标签: sql-server select unicode collation nvarchar

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

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

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

非常感谢

2 个答案:

答案 0 :(得分:5)

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

所以你应该搜索:

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

答案 1 :(得分:3)

不应该是:

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

即比较字符串前面有N,所以它会像nvarchar一样对待它?