You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:15:31