Bài toán đặt ra là vô tình chúng ta đã tạo và sử dụng bảng CSDL với chuẩn Collation và Character Set mặc định hoặc khác utf8. Như trường hợp mình có tạo WordPress trên docker sử dụng MySQL thì nó mặc định default 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
Với 1 database có rất nhiều bảng, chạy từng câu lệnh ALTER với mỗi bảng sẽ mất rất nhiều thời gian thì chúng ta có cách như sau:
Chạy câu lệnh SQL sau để tạo ra 1 loạt các 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ả:
Nguồn: vinasupport.com