美文网首页
MySql常见问题之illegal mix of collati

MySql常见问题之illegal mix of collati

作者: Lemonlzy | 来源:发表于2019-12-24 17:30 被阅读0次

    前言

    今天在进行web页面测试时,Tomcat日志报错:

    [Err] 1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
    

    问题分析:表之间的编码不一致,或者是比较的字段之间的编码不一致。

    解决方法

    1、根据报错日志,找到报错的SQL语句,将语句与参数取出,单独在Navicat或其他数据库查询工具中执行,定位报错的SQL语句。

    2、查看mysql全局编码格式:

    show variables like 'character%';
    

    3、如果全局编码格式不对,则修改mysql的全局编码格式(character_set_filesystem=binary 不用修改),其余属性如下修改即可:

    set character_set_client = utf8;
    

    4、查看mysql数据库字符集:

    show variables like '%collation%';
    

    5、如果数据库字符集编码不一致,则按如下进行修改即可:

    set collation_connection = utf8_general_ci;
    

    6、如果仍然报错,则查看报错SQL语句中涉及到的表,查看表间的字符集编码是否一致:

    show create table <表名>;
    

    7、如果表间字符集编码不一致,修改其中一个表的编码格式,使其表间编码一致:

    alter table <表名> character set utf8 COLLATE utf8_general_ci;
    

    8、如果表间编码一致仍出现同样错误,则查看表字段字符集编码是否一致:

    show full columns from <表名>;
    

    9、修改字段编码:

    ALTER TABLE <表名> MODIFY <字段名> <字段类型,如varchar(30)> CHARACTER SET utf8 COLLATE utf8_general_ci;
    

    10、如果数据库编码一致,表间编码一致,字段编码一致,且涉及到存储过程,仍然出现此类报错,则打开存储过程的定义,删除存储过程中CHARSET utf8,保存存储过程即可。

    欢迎访问我的个人博客:Lemon - 万事顺遂

    相关文章

      网友评论

          本文标题:MySql常见问题之illegal mix of collati

          本文链接:https://www.haomeiwen.com/subject/cjufoctx.html