MySQL 8.0.29更新整数字段时出现排序规则冲突错误求助
问题:MySQL更新整数字段触发排序规则不兼容错误
环境与问题概述
- 数据库版本:8.0.29
- 排序规则配置:
- collation_connection: utf8mb4_0900_ai_ci
- collation_database: utf8_unicode_ci
- collation_server: utf8_unicode_ci
- 目标表
table1排序规则:utf8_general_ci(所有字符列均使用此规则) - 执行的更新语句:
update table1 set validity = 121 where id = 5 - 触发错误:Error Code: 1267. Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
已尝试的排查操作
- 去掉WHERE子句执行全表更新,仍报相同错误
- 尝试强制指定整数121的排序规则,无效
- 将collation_connection改为与表一致的utf8_general_ci,无效果
- 生产环境8.0.25版本执行相同语句无异常
- 另一张字符列排序规则完全相同的表,更新整数字段(使用整数主键)无问题
补充信息
表结构(省略无关字段)
CREATE TABLE `table1` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `description` varchar(100) DEFAULT '', `description_name` varchar(100) DEFAULT NULL, `validity` int NOT NULL, `active_from` datetime NOT NULL, `active_to` datetime NOT NULL, `status` int NOT NULL, `type` int DEFAULT NULL, `group` int DEFAULT '1', PRIMARY KEY (`id`), KEY `idx_table1_date_from` (`active_from`,`active_to`,`status`), KEY `idx_table1_type` (`type`), KEY `idx_table1_group` (`group`) ) ENGINE=InnoDB AUTO_INCREMENT=12211 DEFAULT CHARSET=utf8mb3;
触发器与关联存储过程
- 插入触发器(更新、删除触发器逻辑类似):
CREATE DEFINER=`user`@`%` TRIGGER `cache_insert` AFTER INSERT ON `table1` FOR EACH ROW BEGIN call updateCache( 'TABLE1' ); END
- 存储过程
updateCache执行语句:
UPDATE `cache` SET `timestamp` = UNIX_TIMESTAMP() WHERE `name` = tbl_name;
疑问
整数字段更新本不应涉及排序规则,但数据库似乎在执行更新时套用了表的排序规则,且忽略了指定排序规则的尝试。请问有什么解决思路?
内容的提问来源于stack exchange,提问作者some1
相关产品推荐
相关产品推荐

