mysql查询报错java.sql.SQLException: Illegal mix of collations for operation ‘UNION‘

1.场景

需要写一个sql,需要合并 从四张表查询查询出来的结果,需要用到 UNION ALL 对查询结果进行合并

2.sql

sql 复制代码
-- 从 unit 表中查询
select id, name, '1' as type
from unit
where name like concat('%', #{name}, '%')

UNION ALL

-- 从 system 表中查询
select id, name, '2' as type
from system
where name like concat('%', #{name}, '%')

UNION ALL

-- 从 equipment 表中查询
select id, name, '3' as type
from equipment
where name like concat('%', #{name}, '%')

UNION ALL

-- 从 measuring_point 表中查询
select id, name, '4' as type
from measuring_point
where name like concat('%', #{name}, '%')

3.查询报错

java 复制代码
java.sql.SQLException: Illegal mix of collations for operation 'UNION'

4.检查4张建表语句的排序规则是否一致

sql 复制代码
SHOW FULL COLUMNS FROM unit;
SHOW FULL COLUMNS FROM system;
SHOW FULL COLUMNS FROM equipment;
SHOW FULL COLUMNS FROM measuring_point;
sql 复制代码
CREATE TABLE `template_config_unit` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `template_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '机组模板名称',
  `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '编码',
  `type` int DEFAULT NULL COMMENT '机组类型(1:锅炉专业, 2:汽机专业, 3:电气专业, 4:环化专业)'
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=227 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='机组表';

重点关注

sql 复制代码
ENGINE=InnoDB AUTO_INCREMENT=227 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci 

5.本人遇到的问题 是排序规则不一致造成的

6.解决方案

修改表的排序规则

sql 复制代码
ALTER TABLE unit CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE system CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE equipment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE measuring_point CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

7.最后

问题解决

相关推荐
Thepatterraining17 分钟前
MySQL灾难恢复实战指南:从日志分析到数据恢复,大厂经验全分享
数据库·mysql
*长铗归来*36 分钟前
MySQL新学知识(二)MySQL存储过程
数据库·mysql
zz-zjx4 小时前
MySQL 开源主从复制实战指南(SRE 可靠性优先版)
数据库·mysql·开源
计算机学姐7 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
位步12 小时前
在linux系统中使用通用包安装 Mysql
android·linux·mysql
小陈永不服输13 小时前
MySQL覆盖索引深度解析:从原理到实践的性能优化之道
mysql
Java陈序员14 小时前
免费开源!一款操作 MySQL 和 MariaDB 的 Web 界面工具!
mysql·docker·php·mariadb
程序新视界14 小时前
在MySQL中,一条SQL语句的执行全流程是怎样的?
数据库·后端·mysql
todoitbo15 小时前
我用 TRAE 做了一个不一样的 MySQL MCP
数据库·mysql·adb·ai工具·mcp·trae·mysql-mcp
阿维的博客日记17 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql