更新MySQL字段排序规则为utf8mb4_bin后等于查询不生效问题咨询
问题根因
直接修改字段排序规则时未同步重建该字段上的unique索引,现有索引仍然存储基于原utf8mb4_unicode_ci排序规则计算的索引键值,和修改后的utf8mb4_bin匹配逻辑不兼容,导致等值查询走索引时无法命中记录。
LIKE查询、加BINARY的查询会触发全表扫描,直接比对字段实际存储值而非索引键,因此可以正常返回结果。新建表时索引直接基于utf8mb4_bin生成,不存在索引和字段排序规则不匹配的问题,所以查询正常。
解决方案
- 方案1:重建对应字段的unique索引
先删除原有索引,再重新创建即可,执行语句如下:-- 替换为你实际的索引名称 ALTER TABLE TEST_TABLE DROP INDEX `idx_test_column_unique`; ALTER TABLE TEST_TABLE ADD UNIQUE KEY `idx_test_column_unique`(`test_column`); - 方案2:强制转换字段属性触发全量重建
执行以下ALTER语句,强制转换字段的字符集和排序规则,触发全表数据和关联索引的重建:-- 替换为你实际的字段长度 ALTER TABLE TEST_TABLE MODIFY COLUMN `test_column` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin UNIQUE;
操作注意事项
- 操作前请先备份全表数据,避免数据异常丢失
- 如果表数据量较大,重建索引/修改字段的操作会锁表,建议在业务低峰期执行
内容的提问来源于stack exchange,提问作者Jithin Sebastian
相关产品推荐
相关产品推荐

