在UTF-8上精确匹配mysql查询?

时间:2013-09-14 11:20:36

标签: mysql utf-8 collation

如果查询只是在这种特殊情况下完全匹配,我该如何进行查询:

MONÃE只应点击MONÃE,而不是MONÁE

目前在搜索MONÁE时要求*吐出包含MONÃE的行。我的校对是utf8_unicode_ci - 因此我猜测它允许基于此的命中。有没有办法为特定查询关闭排序规则?在某些情况下,我希望直接命中,而其他一些我希望它无论重音都能击中。

我认为这是关于COLLATE utf8_bin的问题,但在WHERE IN查询中使用时似乎会抛出错误,例如......

这有效:

SELECT * FROM `myTable` WHERE (col1,col2) IN ($mySubQuery)

这失败了;

SELECT * FROM `myTable` WHERE (col1,col2) IN ($mySubQuery) COLLATE utf8_bin

以下是我可能获得的实际查询示例(减去整理) - 此查询正常工作:

SELECT `bookID`
FROM `books`
WHERE (Author,Title)
IN (("James Author","My Great Life"))

可以在某处进行整理吗?以下失败:

SELECT `bookID`
FROM `books`
WHERE (Author,Title)
COLLATE utf8_bin
IN (("James Author","My Great Life"))

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:4)

您需要将COLLATE规范附加到您要搜索的每个列,例如:

SELECT * FROM t1 WHERE c1 COLLATE utf8_bin IN('foo', 'bar');