罗马尼亚字符 'ă' 等于 SQL 服务器中的 'a'
Romanian character 'ă' equals 'a' in SQL Server
我正在开发 SQL 存储罗马尼亚语单词的服务器数据库。罗马尼亚语单词可能包含各种特殊字符(变音符号),例如“ă”、“ş”、“Ş”、“î”或“â”。我有带和不带变音符号的物品。我注意到,如果用户搜索包含 'a' 的内容,它也会 returns 结果不包含 'a',但包含 'ă'。
有没有办法防止'ă'等同于'a'?
我的数据库使用 SQL_Latin1_General_CP1_CI_AS 排序规则。
不是 a
等于 ă
,而是字符串 'ă'
无法在 varchar
中使用您使用的排序规则正确表示;因此 'ă'
被表示为 'a'
(等于 'a'
也就不足为奇了)。因此 'ă'
等于 'a'
(使用归类 SQL_Latin1_General_CP1_CI_AS
),因为在尝试比较之前前一个值发生变化。您需要使用 nvarchar
:
SELECT CASE N'ă' COLLATE SQL_Latin1_General_CP1_CI_AS WHEN 'a' THEN 1 END;
这个 returns NULL
作为布尔表达式是不正确的。
我正在开发 SQL 存储罗马尼亚语单词的服务器数据库。罗马尼亚语单词可能包含各种特殊字符(变音符号),例如“ă”、“ş”、“Ş”、“î”或“â”。我有带和不带变音符号的物品。我注意到,如果用户搜索包含 'a' 的内容,它也会 returns 结果不包含 'a',但包含 'ă'。
有没有办法防止'ă'等同于'a'?
我的数据库使用 SQL_Latin1_General_CP1_CI_AS 排序规则。
不是 a
等于 ă
,而是字符串 'ă'
无法在 varchar
中使用您使用的排序规则正确表示;因此 'ă'
被表示为 'a'
(等于 'a'
也就不足为奇了)。因此 'ă'
等于 'a'
(使用归类 SQL_Latin1_General_CP1_CI_AS
),因为在尝试比较之前前一个值发生变化。您需要使用 nvarchar
:
SELECT CASE N'ă' COLLATE SQL_Latin1_General_CP1_CI_AS WHEN 'a' THEN 1 END;
这个 returns NULL
作为布尔表达式是不正确的。