今天在給一個老項目作msyql儲存emoji表情時,一直報[error][10501]SQLSTATE[HY000]:Generalerror:1267Illegalmixofcollations(utf8mb4_general_ci,IMPLICIT)and(utf8_general_ci,COERCIBLE)foroperation'like'。數據庫編碼是utf8mb4_general_ci,表的編碼也是utf8mb4_general_ci,字段的編碼也是utf8mb4_general_ci,能夠是一直寫入emoji表情到目標字段一直報上面的錯誤,網上找了不少資料才知道,是由於在寫入時要先查詢是否存在,在查詢條件中只要有那個要寫入emoji的字段就會出這個錯誤。又在網上找了不少關於mysql儲存emoji的文章從新梳理了一遍發現,是由於數據庫的鏈接方式仍是utf8。。。。。php
趁着這個事,總結一下若是用Mysql的utf8mb4_general_ci編碼儲存emoji時的總體正確所有環節:mysql
一、數據庫字符集編碼爲utf8mb4_general_ci;sql
二、表的字符集編碼爲utf8mb4_general_ci;數據庫
三、字段的字符集編碼爲utf8mb4_general_ci;編碼
四、應用的數據庫配置編碼爲utf8mb4_general_ci,TP5.+後是在database.php下的charset設爲「utf8mb4」。ci
這樣所有設置好後才能夠使用mysql儲存emoji表情。io