[MySql] General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation


執行時發現PDO 出錯,

報錯信息:


PHP Warning:  PDOStatement::execute(): SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=' in C:\xampp\htdocs\webgolds.php on line 999
 

錯誤原因:

發生該錯誤的原因是我們在代碼層使用的是utf8進行的連接,而操作的表的字符集改成了utf8mb4而導致了衝突。

解決辦法:

1.先在 SQL 中執行以下語法,檢視每個資料表的格式。

show variables where Variable_name like 'collation%';
輸出結果:
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8mb4_general_ci|
+----------------------+-----------------+


2.修改整庫的字符集
分析當中我們知道了發生該錯誤是因為 mysql 中 utf8 字符集的字段無法存儲4字節字符導致的,所以解決辦法就是尋找可以存儲4字節字符的字符集。
在mysql中有一個utf8字符集的超集 utf8mb4,該字符集允許存儲的字符最多為4個字節,那麼它就可以滿足存儲。所以我們將對應的字段或者表設置為utf8mb4字符集即可。修改語句如下:

修改整庫的字符集

ALTER DATABASE database_name[改成你的資料庫名稱] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci







 

回上一頁

相關文章:

喜歡這篇文章嗎?立即分享

Posted : / Views: 534
Last updated :2017-10-20