MySQL 編碼問題
3 min readOct 20, 2021
Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation ‘=’ 的解法
最近碰到一個花了蠻多時間才解決的問題,一開始碰到的錯誤訊息如上,然後看了以下幾個 ref,依序把 database -> table -> column -> client 都檢查一遍:
但還是沒有找到原因,最後是把 view 砍掉再 create 後才成功解決這個問題,重點是去檢查 view 的時候,竟然顯示 collation 是 utf8mb4_unicode_ci
所以建議如果是錯在 view 的話,可以把 view 砍掉重練試試看
另外也順便介紹一下 character set 跟 collation 的關係,簡單來說比較像是:
- character set 類似字典
- collation 字典的目錄
如果字典一樣,但是目錄不一樣,就會發現兩邊查出來的位置不一致,就有機會報錯。還有一些特別的目錄可以讓不同的字判斷成同一個字(例如北歐有加重音符號的字)
最後放一下 utf8mb4_general_ci & utf8mb4_unicode_ci 之間的差異
簡單來說就是:
- utf8mb4_general_ci 查詢比較快,但是建立在他沒有 follow utf8 的排序規則,所以不是通用的 utf8 collation
但是 DB 比較傾向 general purpose,所以強烈建議使用 utf8mb4_unicode_ci 來讓自己的坑越少越好
ref: