【问题标题】:Updating column collation from utf8_general_ci to utf8_bin breaks an index将列排序规则从 utf8_general_ci 更新为 utf8_bin 会破坏索引
【发布时间】:2020-04-10 14:04:46
【问题描述】:

我注意到在将列排序规则从 utf8_general_ci 更新为 utf8_bin 后,会出现以下查询:

SELECT *
FROM tbl_table
WHERE updated_column = 'some_value'

返回空结果集(应该是非空的)。 updated_column 具有非唯一索引。

为什么会发生以及如何重建索引以匹配更新?

P.S. MySql 安装:

mysql.exe  Ver 15.1 Distrib 10.4.7-MariaDB, for Win64 (AMD64), source revision 9a78a283f4ee7e8ccc4afb1d8a24c662fa4c634b

【问题讨论】:

  • 请提供具体的字符串,以便我们更好地解决您的问题。如果数据很敏感,请编写一个显示问题的测试用例。

标签: mysql mariadb indices


【解决方案1】:

utf8_bin 是二进制排序规则,仅根据其 unicode 代码点值比较字符串。

utf8_general_ci 还将匹配规范上等效但具有不同代码点值的字符。此外,比较不区分大小写 (ci)。

如果您 updated_column 包含值“Some_value”,则使用 utf8_general_ci 搜索“some_value”将匹配,而使用 utf8_bin 将不匹配。

【讨论】:

  • 好像不是这样的。该表通过完全匹配的值进行查询,并且在重建索引(删除/创建)后它工作正常。
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 2012-09-14
  • 2011-06-13
  • 2015-10-09
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多