问题Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)……的处理

1. 问题描述

  • Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)……
  • 查询的一个sql报了错,大致的意思就是sql里面的表混杂了utf8mb4_unicode_ci和utf8mb4_general_ci这两种排序字符集。
  • sql里面是有join了多张表,可以通过下面的sql查看该表的排序字符集等信息
    • show table status from 数据库名 like '数据库表名' 在这里插入图片描述

2. 问题解决

(1). 改表字段

  • ‘CHARACTER SET utf8 COLLATE utf8_general_ci;’ 这里是设置自己想要的字符集;"WHERE TABLE_SCHEMA = ‘数据库名’;"这里是你要过滤的条件,比如你要过滤的数据库名
    #改变字段数据
    SELECT
    	TABLE_SCHEMA '数据库',
    	TABLE_NAME '表',
    	COLUMN_NAME '字段',
    	CHARACTER_SET_NAME '原字符集',
    	COLLATION_NAME '原排序规则',
    	CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', COLUMN_TYPE, ' CHARACTER SET utf8 COLLATE utf8_general_ci;' ) '修正SQL' 
    FROM
    	information_schema.`COLUMNS` 
    WHERE
    	TABLE_SCHEMA = '数据库名';
    
  • 然后把“修正SQL”那一列复制出来拿去跑就行了。

(2). 改数据库表的字符集

#改变表
SELECT
	TABLE_SCHEMA '数据库',
	TABLE_NAME '表',
	TABLE_COLLATION '原排序规则',
	CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' COLLATE=utf8_general_ci;' ) '修正SQL' 
FROM
	information_schema.`TABLES`
WHERE
	TABLE_SCHEMA = '数据库名';

(3). 改数据库字符集

#修改数据库
SELECT
	SCHEMA_NAME '数据库',
	DEFAULT_CHARACTER_SET_NAME '原字符集',
	DEFAULT_COLLATION_NAME '原排序规则',
	CONCAT( 'ALTER DATABASE ', SCHEMA_NAME, ' CHARACTER SET utf8 COLLATE utf8_general_ci;' ) '修正SQL' 
FROM
	information_schema.`SCHEMATA` 
WHERE
	SCHEMA_NAME = '数据库名';

3. 问题校验

  • 再次执行1中的sql,观察表的字符集是否改变
  • 再次执行sql,sql运行成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值