问题描述
我正在开发一个存储罗马尼亚语单词的 sql Server 数据库。罗马尼亚语单词可能包含各种特殊字符(变音符号),例如 'ă'、'ș'、'ț'、'î' 或 'â'。我有带和不带变音符号的项目。我注意到如果用户搜索包含“a”的内容,它也会返回不包含“a”但包含“ă”的结果。
有没有办法防止“ă”等同于“a”?
我的数据库使用 sql_latin1_General_CP1_CI_AS 排序规则。
解决方法
这并不是说 a
等于 ă
,而是字符串 'ă'
无法在 varchar
中使用您正在使用的排序规则正确表示;因此 'ă'
被表示为 'a'
(这并不奇怪,等于 'a'
)。因此,'ă'
does 等于 'a'
(使用排序规则 SQL_Latin1_General_CP1_CI_AS
),因为在尝试比较之前前一个值已更改。您需要使用 nvarchar
:
SELECT CASE N'ă' COLLATE SQL_Latin1_General_CP1_CI_AS WHEN 'a' THEN 1 END;
这将返回 NULL
,因为布尔表达式不正确。