环境:

数据库版本MySQL 8.0.32

报错:

在查询数据的时候返回以下错误

“(1267, \”Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation ‘=’\”)”

报错分析及初期解决过程:

该错误是因为在执行查询或比较操作时,涉及到了不同字符集的表或字段之间的比较,导致出现了字符集冲突。

utf8mb4_general_ci为程序要求的排序规则,所以初期尝试将数据库、数据表、字段的排序规则中,有utf8mb4_0900_ai_ci的都统一修改为utf8mb4_general_ci。

但将排序规则统一修改为utf8mb4_general_ci时报错,报错如下:

#3780 – Referencing column ‘user_id’ and referenced column ‘id’ in foreign key constraint ‘django_admin_log_user_id_c564eba6_fk_lyadmin_users_id’ are incompatible.

因为外键字段的排序规则为utf8mb4_0900_ai_ci,所以无法将改外键字段的排序规则修改为utf8mb4_general_ci。尝试了很多方法,不是不行就是有弊端。

最终解决办法:

将数据库、数据表、字段的排序规则从utf8mb4_general_ci统一修改为utf8mb4_0900_ai_ci后问题解决。

原因如下:

MySQL 8.0之后,默认collation不再像之前版本一样是是utf8mb4_general_ci,而是统一更新成了utf8mb4_0900_ai_ci

可视化批量修改数据表和字段排序规则方法:

进入phpMyAdmin(我用的版本phpMyAdmin 5.2)

1.点击要修改的数据库

2.点击右侧操作菜单

3.页面下方找到排序规则,设置排序规则

4.点执行即可(该操作会批量修改数据库、所有数据表、所有字段的排序规则)

补充:如果只是想单独修改一个表和该表字段的排序规则,需要修改那个表点击后再点击操作菜单,按图示操作即可。

参考文章:

当时是因为看了这位朋友的文章才恍然大悟,附上链接以此感谢。

mysql设置了utf8mb4,为什么还有utf8mb4_general_ci和utf8mb4_0900_ai_ci?_utf8mb4_0900_as_ci_LINgZone2的博客-CSDN博客