我有一个 NVarchar 类型的 SQL Server 数据库列,并用标准波斯语字符填充。当我尝试对其运行一个包含 LIKE 运算符的非常简单的查询时,结果集变为空,尽管我知道查询项存在于表中。这是一个非常简单的示例查询,但其行为不正确:
SELECT * FROM T_Contacts WHERE C_ContactName LIKE '%ف%'
ف 是波斯语字符,ContactName 列包含多个包含该字符的条目。
请告诉我应该如何重写表达式或应该进行哪些更改。请注意,我的数据库的排序规则是
SQL_Latin1_General_CP1_CI_AS
。
非常感谢
此外,如果这些值存储为
NVARCHAR
(我希望它们是这样!!),您应该 always 对任何字符串文字使用 N'..'
前缀,以确保不会得到任何不需要的转换回非 Unicode VARCHAR
。
所以你应该搜索:
SELECT * FROM T_Contacts
WHERE C_ContactName COLLATE Persian_100_CI_AS LIKE N'%ف%'
不应该是:
SELECT * FROM T_Contacts WHERE C_ContactName LIKE N'%ف%'
即,比较字符串前面有
N
,因此它会将其视为 nvarchar
?