赞
踩
数据库版本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博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。