环境:
数据库版本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.点执行即可(该操作会批量修改数据库、所有数据表、所有字段的排序规则)
补充:如果只是想单独修改一个表和该表字段的排序规则,需要修改那个表点击后再点击操作菜单,按图示操作即可。
参考文章:
当时是因为看了这位朋友的文章才恍然大悟,附上链接以此感谢。文章来源:https://www.toymoban.com/news/detail-636077.html
mysql设置了utf8mb4,为什么还有utf8mb4_general_ci和utf8mb4_0900_ai_ci?_utf8mb4_0900_as_ci_LINgZone2的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-636077.html
到了这里,关于数据表中字段排序规则不一致(utf8mb4_general_ci、utf8mb4_0900_ai_ci)导致的错误,附解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!