如何在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