Laravel: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE)
Hôm nay mình sẽ hướng dẫn các bạn sửa lỗi 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) của laravel khi tương tác mới mysql. Với version laravel hiện tại của mình là 5.8.x và mysql version 8.0.22.
Nguyên nhân lỗi là table và database không cùng charset, để sửa lỗi này thì ta làm cho table và database cùng một charset.
Trường hợp 1: Database ít table
Thay đổi charset của database:
1 |
ALTER DATABASE `databasename` CHARACTER SET utf8 COLLATE utf8_general_ci; |
Thay đổi charset của table:
1 |
ALTER TABLE `tablename` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; |
Kiểm tra sau khi chạy câu truy vấn (query):
1 2 3 |
use `databasename`; show variables like "collation_database"; -- Kiểm tra db show table status; -- Kiểm tra table |
Trường hợp 2: Database nhiều table:
Truy vấn lấy tất cả các câu để cập nhật charset
1 2 3 4 |
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;") AS ExecuteTheString FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="databasename" AND TABLE_TYPE="BASE TABLE"; |
Copy kết quả trả về và chạy các câu lệnh đó để cập nhật lại charset.
Sau khi chạy xong thì các bạn kiểm tra lại câu query có chạy được chưa nhé, sử dụng lại các câu truy vấn ở mục trên.
Hi vọng sẽ giúp được bạn. Thanks