数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut

 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (utf8mb4_general_ci,COERCIBLE) for operation 'replace'

场景:由一个库往另外一个库进行数据的复制时,复制完成后的数据写入修改有问题,查询没问题,具体的报错信息是如上,当然java代码里抛出的错误也是和这个一样的:

首先百度一搜索,就是字符集的问题,执行了sql查看对比了一下,字符集设置是没有问题的;
数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第1张图片
数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第2张图片

当执行sql的时候报这个错误,经过一系列的排查后最终排查到了原来是这个表用到了触发器,但是呢,触发器的字符格式不一致问题;
数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第3张图片

数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第4张图片
数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第5张图片

给触发器指定编码后的执行结果:
数据库执行sql时Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_general_ci,COERCIBLE), (ut_第6张图片

总结:
1、先排查数据库的编码是否正常
2、再看是否用到了自定义函数或者是触发器,在看下他们的编码是否正常,最好给他们设置编码,防止编码不一致的问题;

show charset like 'gb%';     //查看gb语言
show charset like 'utf%';    //查看utf语言
show variables;              //“variables” 系统变量
show variables like 'char%'; //“variables” 系统变量,查看char变量


show variables like 'coll%'; 

你可能感兴趣的:(mysql,笔记,解决问题小结,数据库,ci,database)