1.java.sql.SQLException: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
上面的问题就是因为关联查询的时候两个表字段的字符集不一致导致这样的问题
你可以去修改表的字符集:
当然windows系统可以在Navicat中手动修改。
但是在 linux 生产环境中可以执行以下命令来修改字符集:
# 修改表中的某个字段的字符集
# 表名 字段 字段 类型 字符集
ALTER TABLE person CHANGE sex sex VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
# 修改表的默认字符集,以及 表中所有字段的字符集
ALTER TABLE person CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
# 修改表的默认字符集 这个sql 有可能 解决不了以上问题
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
2.查看表的所有字段字符集
SHOW FULL COLUMNS FROM 表名;
3.一个字符问题
发生的原因是:COLLATE xxx_ci 的意思是:Case Insensitive 不区分大小写
4.再提一嘴,不知道对错
这个是因为里面的 ? 这个字符插不进去,是因为我用的utf-8的编码格式,可以自己试试;
mysql中的utf8并不是真正的utf-8,这是mysql的一个失误,至于为什么不修复bug,是因为修复的话需要所有用户重新构建数据库;
2010年发布的 utf8mb4 才是真正的utf-8,utf-8支持4个字节,而mysql中的utf8只支持3个字节;
所以说 mysql 中的 utf8mb4 支持的 字符 要比 utf8 多,新系统建议使用 utf8mb4;
我试了试utf8bm4 好像也插不进去 ? 这字符是什么鬼,