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