Mysql Illegal mix of collations 的报错

尝试使用union合并,却遇到了报错:1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf16_general_ci,IMPLICIT) for operation 'UNION'。此错误源于两个表字段字符集编码不同,无法直接使用union操作。解决方法是通过NAVICAT客户端重新定义表结构,确保编码一致。业务处理过程中遇到的...
Mysql Illegal mix of collations 的报错
业务场景中,需将好友表信息同步至关注表。尝试使用union合并,却遇到了报错:1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf16_general_ci,IMPLICIT) for operation 'UNION'。此错误源于两个表字段字符集编码不同,无法直接使用union操作。解决方法是通过NAVICAT客户端重新定义表结构,确保编码一致。

业务处理过程中遇到的问题包括:各表的用户名缺失及关注表、好友表间存在重复数据。为解决用户名缺失问题,使用了以下SQL语句更新表信息:

UPDATE gushen_user_follow a,gushen_user b SET a.leader_name=b.username WHERE a.leader_id=b.user_id;

UPDATE gushen_user_follow a,gushen_user b SET a.follower_name=b.username WHERE a.follower_id=b.user_id;

UPDATE gushen_user_friend a,gushen_user b SET a.owner_name=b.username WHERE a.owner_id=b.user_id;

UPDATE gushen_user_friend a,gushen_user b SET a.friend_name=b.username WHERE a.friend_id=b.user_id;

为解决重复数据问题,先进行子查询查找好友表在关注表中的重复数据,再将不重复的数据直接插入关注表中,使用SQL如下:

INSERT INTO gushen_user_follow (leader_id,leader_name,follower_id,follower_name,status,followed_time,is_view)

SELECT owner_id,owner_name,friend_id,friend_name,1,UNIX_TIMESTAMP(CURRENT_TIMESTAMP),1 FROM gushen_user_friend c WHERE c.fid not in(SELECT b.fid FROM gushen_user_follow a ,gushen_user_friend b WHERE a.leader_id=b.owner_id and a.follower_id=b.friend_id ORDER BY a.status,b.status)

关注表结构定义为:

CREATE TABLE `gushen_user_follow` (

`follow_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,

`leader_id` bigint(20) NULL DEFAULT NULL COMMENT '被订阅者,对应用户id' ,

`leader_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,

`follower_id` bigint(20) NULL DEFAULT NULL COMMENT '订阅用户,对应用户id' ,

`follower_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,

`status` tinyint(1) NULL DEFAULT NULL COMMENT '0=取关,1=关注,3=新增' ,

`followed_time` int(11) NULL DEFAULT NULL COMMENT '关注时间' ,

`is_view` tinyint(1) NULL DEFAULT 0 COMMENT '0=未查看,1=已查看' ,

PRIMARY KEY (`follow_id`))

好友表结构定义为:

CREATE TABLE `gushen_user_friend` (

`fid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT ,

`friend_id` bigint(20) NULL DEFAULT NULL COMMENT '发请求用户id' ,

`friend_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发请求用户名' ,

`owner_id` bigint(20) NULL DEFAULT NULL COMMENT '当前接收请求用户id' ,

`owner_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '当前接收请求用户名' ,

`status` tinyint(1) NULL DEFAULT NULL COMMENT '0=解除,1=请求,2=通过' ,

`owner_group` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '当前接收请求用户分组' ,

`friend_group` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发请求用户分组' ,

`create_time` int(11) NULL DEFAULT NULL COMMENT '创建时间' ,

PRIMARY KEY (`fid`))2024-10-02
mengvlog 阅读 10 次 更新于 2025-07-21 08:20:10 我来答关注问题0
檬味博客在线解答立即免费咨询

报错相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部