我有一个带utf8通用ci校对的MySQL表。在表格中,我可以看到两个条目:
阿巴德
ABAD
我正在使用如下所示的查询:
SELECT * FROM `words` WHERE `word` = 'abád'
查询结果给出了两个单词:
阿巴德
ABAD
有没有办法表明我只想让MySQL找到重音词?我希望查询只返回
abád
我也试过这个问题:
SELECT * FROM `words` WHERE BINARY `word` = 'abád'
它没有给我任何结果。谢谢你的帮助。
答案 0 :(得分:81)
如果您对该字段的搜索始终是重音敏感的,则将字段的排序规则声明为utf8_bin(将比较utf8编码字节的相等性)或使用特定于语言的排序规则来区分重音和非重音字符。
col_name varchar(10) collate utf8_bin
如果搜索通常不区分重音,但您想为此搜索设置例外,请尝试;
WHERE col_name = 'abád' collate utf8_bin
答案 1 :(得分:12)
在我的版本(MySql 5.0)中,对于不区分大小写,重音敏感的搜索,没有任何utf8字符集整理可用。 utf8唯一的重音敏感分类是utf8_bin。但它也是区分大小写的。
我的工作一直是使用这样的东西:
SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin
答案 2 :(得分:3)
MySQL错误,以供将来参考,是http://bugs.mysql.com/bug.php?id=19567。
答案 3 :(得分:1)
我遇到了同样的错误。
我已将表格的排序规则更改为utf8_bin(通过phpMyAdmin),问题解决了。
希望它有所帮助! :)
答案 4 :(得分:1)
检查数据库表排序规则类型是否以" _ci"结尾,这表示不区分大小写......
将其更改为整理相同或最近的名称,而不使用" _ci" ...
例如......更改" utf8_general_ci" to" utf8_bin" MKE
答案 5 :(得分:0)
SELECT * FROM `words` WHERE column = 'abád' collate latin1_General_CS
(或您的校对包括cs)
答案 6 :(得分:0)
您可以尝试在mysql中搜索字符的十六进制变量HEX(),并在编程语言中使用类似的函数并匹配它们。当我在做一个人可以选择一个人的第一个字母的列表时,这对我很有用。
答案 7 :(得分:0)
嗯,你刚才描述了utf8_general_ci整理的全部内容(a,á,à,â,ä,å都等于a)。
对于utf8_general_ci和utf8_unicode_ci,MySQL服务器5.1也有变化,因此它也依赖于服务器版本。更好地检查文档。
所以,如果它是MySQL服务器5.0,我会选择utf8_unicode_ci而不是utf8_general_ci,这对你的用例来说显然是错误的。
答案 8 :(得分:0)
接受的答案很好,但要注意你可能不得不使用COLLATE utf8mb4_bin!
WHERE col_name = 'abád' collate utf8mb4_bin
上面修复了以下错误:
MySQL说:文档1253 - COLLATION' utf8_bin'无效 字符集' utf8mb4'
答案 9 :(得分:0)
对于我来说,在utf8_general_ci的数据库中的MySql服务器5.1中对重音不敏感和不区分大小写的搜索很有用,其中列是LONGBLOB。
select * from words where '%word%' LIKE column collate utf8_unicode_ci
带
select * from words where'%word%' LIKE column collate utf8_general_ci
结果区分大小写,但不区分重音。