等于操作不适用于具有更新排序规则的字段
Equal to operation not working on a field with updated collation
我试图将现有的 varchar
列和 unique
索引转换为 case sensitive
列。为此,我更新了特定列的排序规则。
- 前一个值:utf8mb4_unicode_ci
- 当前值:utf8mb4_bin
现在我的 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 的问题。我解决这个问题的步骤如下:
- 删除了列上的唯一索引
- 更改列的排序规则
- 再次创建唯一索引
现在一切正常。似乎 MySQL 在更改排序规则时没有重建唯一索引。然而,上述步骤解决了我的问题。
您是如何更改排序规则的?您可能会想到大约 4 种方法。大多数做一些不同的事情。
可能 ALTER TABLE ... CONVERT TO COLLATION utf8mb4_bin
就是您所需要的。
为什么是“bin”?你想匹配大小写和重音?那就是 "abcd" != "Abcd"?
我试图将现有的 varchar
列和 unique
索引转换为 case sensitive
列。为此,我更新了特定列的排序规则。
- 前一个值:utf8mb4_unicode_ci
- 当前值:utf8mb4_bin
现在我的 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 的问题。我解决这个问题的步骤如下:
- 删除了列上的唯一索引
- 更改列的排序规则
- 再次创建唯一索引
现在一切正常。似乎 MySQL 在更改排序规则时没有重建唯一索引。然而,上述步骤解决了我的问题。
您是如何更改排序规则的?您可能会想到大约 4 种方法。大多数做一些不同的事情。
可能 ALTER TABLE ... CONVERT TO COLLATION utf8mb4_bin
就是您所需要的。
为什么是“bin”?你想匹配大小写和重音?那就是 "abcd" != "Abcd"?