首页 > 解决方案 > 等于操作不适用于具有更新排序规则的字段

问题描述

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

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

当我尝试运行一个简单的查询时,SELECT * FROM TEST_TABLE WHERE test_column = 'abcd';它不会返回任何结果。

但是,当我尝试时SELECT * FROM TEST_TABLE WHERE test_column LIKE 'abcd';,它会正确返回数据。

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

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

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

标签: mysqldatabasemariadbcollation

解决方案


这似乎是 MySQL 的问题。我为解决此问题而采取的步骤如下:

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

现在它按预期工作。更改排序规则时,MySQL 似乎没有重建唯一索引。但是,上述步骤解决了我的问题。


推荐阅读