罗马尼亚字符 'ă' 等于 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 作为布尔表达式是不正确的。