3

我的数据库中的特殊字符有问题。它们现在显示正确,但 sql 似乎在查询中忽略了它们。例如,不幸的是我有这些条目:
Morgait
Morgaít
Mórgait

现在这些名称有一个 UNIQUE 键,当尝试在第一个之后添加第二个和第三个时,它已经中断说最后 2 个无法添加,因为名称不再是唯一的。简而言之,í 被视为正常的 i,而 ó 被视为正常的 o。

当我查询时: SELECT * FROM member WHERE charname = 'Morgait' 我得到所有 3 个结果。当我将 i 更改为 í、o 更改为 ó 或同时更改两者时也是如此。

如何让数据库看到这些差异?我将表的排序规则设置为 ascii_general_ci(也尝试了 UTF 8 unicode ci)。

4

1 回答 1

1

所有这些排序规则都是accent insensitive. 你可以试试utf8_binwhich is accent sensitive,但它也是case sensitive。使用不区分重音的排序规则,例如é等于eë等。

SELECT * FROM member WHERE charname = 'Morgait' COLLATE utf8_bin 

应该做的伎俩。如果您需要不区分大小写,可以尝试

SELECT * FROM member WHERE LOWER(charname) = LOWER('Morgait') COLLATE utf8_bin
于 2012-05-06T15:11:52.987 回答