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

标签 mysql utf-8 collation

在这种特殊情况下,如何使查询仅在完全匹配时才命中:

MONÉ 应该只点击 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"))

感谢您的宝贵时间和帮助。

最佳答案

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

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

关于mysql - 精确匹配 UTF-8 上的 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801200/

相关文章:

php mysql 数据库连接非常慢

python - sys.setdefaultencoding ('utf-8' 的危险)

python - selenium webdriver中的UTF编码

mysql - 哪种 SQL 归类用于特殊字符,例如 é?

mysql - 将所有 UTF8 字符规范化为最标准的格式

java - JPQL 检查日期之间是否有空房

PHP MySQL : decrypt a column value from a MySQL row that was encrypted upon insertion and parse to JSON

python - 如何将从 YAML 文件中检索到的 utf-8 文件名用于 os.path.isdir()?

sql - 等于操作中 "SQL_Latin1_General_CP1_CI_AS"和 "Modern_Spanish_CI_AS"之间的排序规则冲突

java - ResultSet.TYPE_FORWARD_ONLY 可以向后滚动