查询特殊字符敏感

时间:2012-05-06 15:02:31

标签: mysql

我的数据库中有特殊字符的问题。它们现在显示正确,但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)。

1 个答案:

答案 0 :(得分:1)

所有这些归类都是accent insensitive。您可以尝试utf8_bin 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