如何在MySql中进行一个强调敏感的search

我有一个与utf8通用ci整理MySQL表。 在表格中,我可以看到两个条目:

阿巴德
阿巴德

我正在使用这样的查询:

SELECT * FROM `words` WHERE `word` = 'abád' 

查询结果给出了两个词:

阿巴德
阿巴德

有没有办法表明我只希望MySQLfind重音词? 我想查询只返回

阿巴德

我也试过这个查询:

 SELECT * FROM `words` WHERE BINARY `word` = 'abád' 

它给我没有结果。 感谢您的帮助。

如果您在该字段上的search始终是重音敏感的,则将该字段的sorting规则声明为utf8_bin(将比较utf8编码的字节的相等性),还是使用语言特定的sorting规则来区分重音符号和un有趣的字符。

 col_name varchar(10) collate utf8_bin 

如果search通常不区分重音,但您希望为此search设置例外,请尝试;

 WHERE col_name = 'abád' collate utf8_bin 

在我的版本(MySql 5.0)中,不存在对区分大小写,区分重音的任何utf8字符集比较。 utf8唯一的口音敏感整理是utf8_bin。 但是它也是区分大小写的。

我的工作是使用这样的东西:

 SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin 

MySQL的错误,以供将来参考,是http://bugs.mysql.com/bug.php?id=19567

 SELECT * FROM `words` WHERE column = 'abád' collate latin1_General_CS 

(或者你的整理包括cs)

您可以尝试在mysql中search字符的hexvariablesHEX(),并在您的编程语言中使用类似的函数并匹配它们。 当我做一个人可以select一个人的第一个字母的列表,这对我很好。

那么,你刚刚描述了什么样的utf8_general_ci整理(a,á,à,?,?,全部等于一个比较)。

MySQL服务器5.1在utf8_general_ci和utf8_unicode_ci方面也有所变化,所以它也是服务器版本。 更好地检查文档。

所以,如果它是MySQL服务器5.0,我会去utf8_unicode_ci而不是utf8_general_ci,这显然是你的用例错误。

我得到了同样的错误。

我已经把我的表格整理到utf8_bin(通过phpMyAdmin),问题解决了。

希望能帮助到你! 🙂

检查数据库表sorting规则types是否以“_ci”结尾,这代表不区分大小写。

将其更改为整理相同或最近的名称,而不使用“_ci”…

例如…将“utf8_general_ci”更改为“utf8_bin”Mke