【问题标题】:Exact matching a mysql query on UTF-8?精确匹配 UTF-8 上的 mysql 查询?
【发布时间】:2013-09-14 11:20:35
【问题描述】:

在这种特殊情况下,只有在完全匹配的情况下,我才能进行查询命中:

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"))

感谢您的时间和帮助。

【问题讨论】:

    标签: mysql utf-8 collation


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢乔恩。所以搜索多列时不可能做到这一点?我已经修改了我的原始帖子,以包含一个我可能会得到的实际查询的示例。
    • @Shaun:有可能,只需使用排序规范跟踪对列的每个单独提及:c1 COLLATE utf8_bin, c2 COLLATE utf8_bin
    • 谢谢乔恩 - 我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多