Vấn đề ở đây là chúng ta đã vô tình sử dụng một bảng Cơ sở dữ liệu (CSDL) với một bộ Collation và Character Set mặc định, hoặc một bộ Collation và Character Set khác với utf8. Một ví dụ cụ thể có thể là khi chúng ta tạo một trang web WordPress trong một môi trường Docker và sử dụng MySQL. Trong trường hợp này, giá trị mặc định của Collation và Character Set thường là “latin1”.
Tuy nhiên nếu bạn đang tạo 1 website sử dụng tiếng Việt thì bạn nên chuyển về định dạng là
- Character Set: utf8mb4
- Collation: utf8mb4_unicode_ci
Cách chuyển Collation & Character Set 1 bảng CSDL
Chúng ta sử dụng câu lệnh SQL ALTER của MySQL & MariaDB
ALTER TABLE wp_users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cách chuyển Collation & Character Set cho tất cả các bảng CSDL
Nếu bạn có một cơ sở dữ liệu với nhiều bảng và muốn thực hiện thay đổi (ALTER) cho từng bảng, thực hiện từng câu lệnh ALTER một có thể tốn rất nhiều thời gian. Trong trường hợp này, bạn có thể thực hiện theo cách sau:
Sử dụng câu lệnh SQL dưới đây để tạo một loạt câu lệnh ALTER TABLE
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<schema>' AND TABLE_TYPE != 'VIEW';
Với <schema> là tên CSDL của chúng ta.
Câu lệnh trên sẽ tạo ra tất cả các câu lệnh SQL mà chúng ta mong muốn:
ALTER TABLE wp_commentmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_links CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_postmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_term_relationships CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_term_taxonomy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_termmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_terms CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_usermeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cuối cùng bạn chỉ việc copy và cho chạy tất cả các câu lệnh trên cùng 1 lượt là xong.
Kết quả: