mysql - 等于操作不适用于具有更新排序规则的字段
问题描述
我试图将varchar
带有unique
索引的现有列转换为 case sensitive
列。因此,为此,我更新了特定列的排序规则。
- 以前的值:utf8mb4_unicode_ci
- 当前值:utf8mb4_bin
现在我的表中有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
转换的问题。有什么解决办法还是我做错了什么?
解决方案
这似乎是 MySQL 的问题。我为解决此问题而采取的步骤如下:
- 删除列上的唯一索引
- 更改列的排序规则
- 再次创建唯一索引
现在它按预期工作。更改排序规则时,MySQL 似乎没有重建唯一索引。但是,上述步骤解决了我的问题。
推荐阅读
- windows - 如何使用批处理脚本复制文件和文件结构
- python - obj.name() 对象不可调用
- python-2.7 - 我想从超声波传感器获得距离和百分比,但我只能设法获得距离
- python - 如何判断哪些类型注解支持 __iter__
- css - 如果我只能在浏览器元素检查中找到特定类,如何从我的主题中删除它?
- html - .col-form-label 类对引导程序中的标签有什么作用?
- java - 拒绝具有前导或尾随空格的字段的 api 调用请求
- swift - 在监视器之间移动时,使用 CGDisplayMoveCursor 移动鼠标光标无法按预期工作
- ruby-on-rails - 当视图中存在 f.association 时,simple_form 中的选定下拉菜单
- android - Android 生物识别:我们现在可以指定需要哪种类型的生物识别身份验证吗