异常:Illegal mix of collations (gbk_bin,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

[Mysql] 异常错误:Illegal mix of collations (gbk_bin,IMPLICIT) a nd (latin1_swedish_ci,IMPLICIT) for operation ‘=’

问题归类:数据库_Mysql

问题描述

今天重新部署导入了新的数据库,运行程序时,前台无反应,后台异常报错:Illegal mix of collations (gbk_bin,IMPLICIT) a nd (latin1_swedish_ci,IMPLICIT) for operation ‘=’。经过排查,得知原因是数据库编码问题,字符集及排序规则不完全一致导致的。

解决方法

第一种情况:

1.在Mysql 中查询数据库的编码

SHOW VARIABLES LIKE 'character_set_%';

SHOW VARIABLES LIKE 'collation_%';

发现如下图显示:character_set_server 的编码格式是latin1,和其他设置不太一样
在这里插入图片描述
在这里插入图片描述
2.更新操作:

SET character_set_server = uft8;

SET collation_server = utf8_general_ci;

若其他几项设置与数据库编码不一致,同理修改即可。

第二种情况:

若第一种情况修改后,还是无法解决,可查看下数据库各个表中varchar类型的编码字符集及排序规则是否与数据库一致。

Mysql 执行如下查询语句,然后把查询结果全选复制出,进行执行操作,即批量修改数据库的编码及各个表中的字段的字符集及排序规则设置。

SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET  utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '数据库名字'
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 = '数据库名字'
AND DATA_TYPE = 'varchar'
AND
(
    CHARACTER_SET_NAME != 'utf8'
    OR
    COLLATION_NAME != 'utf8_general_ci'
);

这里例子语句统一修改为utf8 设置 。若设置为其他类型,则替换为语句中相应的utf8,utf8_general_ci 即可


版权声明:本文为weixin_43743747原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。