MySQL升级到8.0 遇到的坑
因为公司业务需求,需要将项目迁移,然后把原本的oracle数据库换成mysql的。一开始用的是5.x版本的mysql,为了方便迁移sql,将mysql版本升级到了8.0,mysql8.0其实和oracle有很大的贴近了,具体可以自己去了解下。
因为升级到了8.0,在建视图,查询视图后会发生各种 1267 - Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '=' 这样的问题。
在检查了sql里用到的表的编码和排序规则,确认更改为utf8mb4_general_ci无误后,还是不行。这样的话,我们返回去看看刚创建失败的视图,点击设计视图,发现创建视图的sql有点问题,
这样可以初步断定,是rc表的capacity_code字段没有设置字符排序规则,导致编码时用回了mysql8.0默认的排序规则导致的。
再使用 show create table table_name; 查询这个表,发现这个字段确实没有设置字符排序规则。问题就到这结束了。
解决方法:ALTER TABLE table_name convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 将表的所有字段编码排序规则全部转为utf8mb4_general_ci