Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)错误。

在程序启动执行SQL时遇到'Illegal mix of collations'错误,原因是不同表中tenant_id字段的字符集和排序规则不一致。解决方法是通过SQL脚本批量修改表的字符集和排序规则至统一,例如将所有varchar类型的字段更改为utf8_general_ci。
摘要由CSDN通过智能技术生成

程序启动的时候,执行SQL语句时报错,SQL语句是一个长的连接语句,很多外键关联。
最后问题定位到:
两个比较的tenant_id(数据库中的一个字段)排序规则或者字符编码不一致,不能进行比较;我的一张表中的tenant_id的排序规则是utf8_general_ci,另外一张表是同事建实体类的时候自动生成的,他数据库的默认排序规则是utf8_unicode_ci,所以报错。
解决办法:
调用一个SQL脚本,批量生成SQL执行语句,然后再执行这些生成的SQL语句。


1、将所有数据类型为varchar类型的数据变成utf-8编码和utf8_general_ci排序规则.

SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET UTF8 COLLATE utf8_general_ci', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'databaseName'
AND DATA_TYPE = '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值