等于操作不适用于具有更新排序规则的字段

Equal to operation not working on a field with updated collation

我试图将现有的 varchar 列和 unique 索引转换为 case sensitive 列。为此,我更新了特定列的排序规则。

现在我的 table TEST_TABLE 中有一行 test_column 值为 abcd

当我尝试 运行 一个像 SELECT * FROM TEST_TABLE WHERE test_column = 'abcd'; 这样的简单查询时 returns 没有结果。

然而,当我尝试 SELECT * FROM TEST_TABLE WHERE test_column LIKE 'abcd'; 时,它 returns 数据正确。

另外,当我尝试 SELECT * FROM TEST_TABLE WHERE BINARY test_column = 'abcd'; 时,它 returns 数据正确。

我尝试的另一件事是创建 table 的副本,在创建自身时将列排序规则设置为 utf8mb4_bin,然后从原始 table 复制所有数据。然后查询 SELECT * FROM TEST_TABLE WHERE test_column = 'abcd'; 工作正常。

所以这似乎是 BINARY 转换的问题。有什么解决办法还是我做错了什么?

这似乎是 MySQL 的问题。我解决这个问题的步骤如下:

  1. 删除了列上的唯一索引
  2. 更改列的排序规则
  3. 再次创建唯一索引

现在一切正常。似乎 MySQL 在更改排序规则时没有重建唯一索引。然而,上述步骤解决了我的问题。

您是如何更改排序规则的?您可能会想到大约 4 种方法。大多数做一些不同的事情。

可能 ALTER TABLE ... CONVERT TO COLLATION utf8mb4_bin 就是您所需要的。

为什么是“bin”?你想匹配大小写和重音?那就是 "abcd" != "Abcd"?