環(huán)境:
數(shù)據(jù)庫版本MySQL 8.0.32
報(bào)錯(cuò):
在查詢數(shù)據(jù)的時(shí)候返回以下錯(cuò)誤
"(1267, \"Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='\")"
報(bào)錯(cuò)分析及初期解決過程:
該錯(cuò)誤是因?yàn)樵趫?zhí)行查詢或比較操作時(shí),涉及到了不同字符集的表或字段之間的比較,導(dǎo)致出現(xiàn)了字符集沖突。
utf8mb4_general_ci為程序要求的排序規(guī)則,所以初期嘗試將數(shù)據(jù)庫、數(shù)據(jù)表、字段的排序規(guī)則中,有utf8mb4_0900_ai_ci的都統(tǒng)一修改為utf8mb4_general_ci。
但將排序規(guī)則統(tǒng)一修改為utf8mb4_general_ci時(shí)報(bào)錯(cuò),報(bào)錯(cuò)如下:
#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.
因?yàn)橥怄I字段的排序規(guī)則為utf8mb4_0900_ai_ci,所以無法將改外鍵字段的排序規(guī)則修改為utf8mb4_general_ci。嘗試了很多方法,不是不行就是有弊端。
最終解決辦法:
將數(shù)據(jù)庫、數(shù)據(jù)表、字段的排序規(guī)則從utf8mb4_general_ci統(tǒng)一修改為utf8mb4_0900_ai_ci后問題解決。
原因如下:
MySQL 8.0之后,默認(rèn)collation不再像之前版本一樣是是utf8mb4_general_ci,而是統(tǒng)一更新成了utf8mb4_0900_ai_ci
可視化批量修改數(shù)據(jù)表和字段排序規(guī)則方法:
進(jìn)入phpMyAdmin(我用的版本phpMyAdmin 5.2)
1.點(diǎn)擊要修改的數(shù)據(jù)庫
2.點(diǎn)擊右側(cè)操作菜單
3.頁面下方找到排序規(guī)則,設(shè)置排序規(guī)則
4.點(diǎn)執(zhí)行即可(該操作會(huì)批量修改數(shù)據(jù)庫、所有數(shù)據(jù)表、所有字段的排序規(guī)則)
?補(bǔ)充:如果只是想單獨(dú)修改一個(gè)表和該表字段的排序規(guī)則,需要修改那個(gè)表點(diǎn)擊后再點(diǎn)擊操作菜單,按圖示操作即可。
參考文章:
當(dāng)時(shí)是因?yàn)榭戳诉@位朋友的文章才恍然大悟,附上鏈接以此感謝。文章來源:http://www.zghlxwxcb.cn/news/detail-636077.html
mysql設(shè)置了utf8mb4,為什么還有utf8mb4_general_ci和utf8mb4_0900_ai_ci?_utf8mb4_0900_as_ci_LINgZone2的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-636077.html
到了這里,關(guān)于數(shù)據(jù)表中字段排序規(guī)則不一致(utf8mb4_general_ci、utf8mb4_0900_ai_ci)導(dǎo)致的錯(cuò)誤,附解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!