Cách xử lý nhanh: Tìm kiếm và Thay thế
Cách khắc phục hiệu quả nhất là thay thế các chuỗi collation không tương thích trong tệp .sql của bạn bằng một phiên bản mà máy chủ cũ có thể thực sự nhận diện.
- Mở tệp SQL dump của bạn bằng trình soạn thảo mã nguồn hoặc công cụ dòng lệnh.
- Tìm kiếm tất cả các phiên bản của
utf8mb4_0900_ai_civà thay thế chúng bằngutf8mb4_unicode_ci. - Tìm
utf8mb4_0900_as_civà cũng thay thế chúng bằngutf8mb4_unicode_ci. - Lưu tệp và bắt đầu lại quá trình nhập (import) của bạn.
Tại sao lỗi này xảy ra?
Với việc phát hành phiên bản 8.0, MySQL đã cập nhật bộ ký tự mặc định thành utf8mb4 và collation mặc định thành utf8mb4_0900_ai_ci. Số "0900" đề cập đến Thuật toán Đối chiếu Unicode (UCA) 9.0.0. Thành phần "ai" cho biết việc sắp xếp không phân biệt dấu (accent-insensitive).
Các phiên bản cũ như MySQL 5.7 được xây dựng nhiều năm trước khi các tiêu chuẩn này tồn tại. Chúng đơn giản là không có các tệp thư viện để hiểu các chỉ dẫn "0900". Khi tệp xuất của bạn yêu cầu một máy chủ cũ tạo bảng bằng các quy tắc mới này, máy chủ sẽ dừng lại và báo lỗi Error 1273.
Ba cách để khắc phục
Cách 1: Sử dụng dòng lệnh (Tốt nhất cho các tệp lớn)
Việc cố gắng mở một bản SQL dump dung lượng 2GB trong trình soạn thảo văn bản thông thường có khả năng sẽ làm máy tính của bạn bị treo. Thay vào đó, hãy sử dụng sed. Nó xử lý tệp theo từng dòng mà không cần tải toàn bộ nội dung vào bộ nhớ.
# Thay thế collation 0900 bằng biến thể unicode tương thích
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' backup.sql
# Đồng thời xử lý biến thể phân biệt dấu nếu có
sed -i 's/utf8mb4_0900_as_ci/utf8mb4_unicode_ci/g' backup.sql
Lưu ý: Nếu bạn đang sử dụng macOS, cú pháp sẽ hơi khác một chút: sed -i '' 's/.../.../g' backup.sql.
Cách 2: Sử dụng VS Code hoặc Notepad++
Nếu tệp của bạn nhỏ—ví dụ dưới 50MB—thì một trình soạn thảo trực quan thường sẽ dễ dàng hơn.
- Mở tệp
.sqltrong VS Code hoặc Notepad++. - Nhấn
Ctrl + H(hoặcCmd + Option + Ftrên Mac) để mở công cụ Thay thế (Replace). - Tìm:
utf8mb4_0900_ai_ci - Thay thế bằng:
utf8mb4_unicode_ci - Nhấp vào Replace All và lưu tệp.
Cách 3: Chủ động cấu hình khi xuất dữ liệu
Nếu bạn vẫn có thể truy cập cơ sở dữ liệu nguồn, bạn có thể thử xuất nó với các cài đặt tương thích tốt hơn. Trong phpMyAdmin, hãy chuyển đến tab "Export" và chọn "Custom". Dưới mục "Format-specific options", hãy tìm menu thả xuống có nhãn "Database system or older MySQL server to maximize output compatibility with". Chọn MYSQL40 là một mẹo phổ biến, mặc dù việc thay thế chuỗi thủ công vẫn là phương pháp đáng tin cậy nhất khi di chuyển sang 5.7.
Kiểm tra kết quả
Sau khi sửa đổi tệp, hãy chạy lại lệnh nhập của bạn:
mysql -u username -p database_name < backup.sql
Sau khi hoàn tất, hãy đăng nhập vào MySQL console để xác minh các bảng. Chạy lệnh SHOW TABLE STATUS; và kiểm tra cột Collation. Bây giờ nó sẽ liệt kê utf8mb4_unicode_ci. Cuối cùng, hãy duyệt trang web của bạn để đảm bảo rằng các emoji và ký tự đặc biệt như é hoặc ñ đang hiển thị chính xác.
Lưu ý về các phiên bản cũ hơn
Nếu bạn đang di chuyển sang một máy chủ rất cũ (trước MySQL 5.5.3), ngay cả utf8mb4 cũng sẽ không hoạt động. Trong những trường hợp hiếm hoi đó, bạn phải thay thế utf8mb4 bằng utf8 và utf8mb4_unicode_ci bằng utf8_unicode_ci. Tuy nhiên, đối với hầu hết các môi trường hosting hiện đại, utf8mb4_unicode_ci là lựa chọn an toàn và tương thích nhất.

