Nếu 1 ngày nào đó 1 bạn được 1 file .sql. Sau khi import vào MySQL và bạn xem trong phpMyAdmin thấy tiếng Việt của chúng ta nó biến thành dạng như hình dưới:
Điều này xác định bản này đã DEFAULT CHARSET=utf8 hoặc latin1, cột dữ liệu đã chỉnh COLLATE utf8_general_ci hoặc latin1_general_ci. Nhưng code PHP phía người dùng khi INSERT dữ liệu vào database không có SET NAMES utf8... cho nên dữ liệu chúng ta nó như vậy. MySQL đủ thông minh để hiểu chữ Việt chúng ta insert không phải bản mã ASCII thuần mà nó là ASCII 8bit và nó dùng ASCII 8bit để lưu nhầm không mất dữ liệu chúng ta. ASCII 8bit còn được Unikey hiểu với bản mã là UTF-8 Literal nhưng công cụ chuyển mã của Unikey không hỗ trợ để chuyển về UTF8.
File sql của mình khá lớn (20MB). Mình có dùng thử Notepad++ (Encoding > Convert to ASCI) vì file .sql đang là UTF8 (mặc định khi dump), sau đấy (Encoding > Encode in UTF8) thì tữ liệu hiện đúng chữ Việt như mong muốn. Sau đấy chúng ta Save As... lại. Tiếp đến search and replace các từ khóa "latin1" -> "utf8". Có thể của bạn không phải là latin1, nhưng mục tiêu của chúng ta là là chuyển tất code Tạo bản về DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci và cột COLLATE utf8_general_ci, tùy theo mà có từ khóa tương ứng. Quá trình search and replace nên search từng cái rồi mới replace vì điều kiện từ khóa hơi hẹp. Repace thành utf8 chỉ dành cho những câu lệnh tạo table thôi.
Sau khi sửa .sql hoàn thành. Tạo database để import bạn phải chọn Collation là uft8_general_ci. Khi mở connection bằng PHP để hiện dữ liệu chúng ta nhớ SET NAMES utf8 (có thể tìm hiểu thêm từ google). Sở dĩ chúng ta phải làm việc này vì chữ việt tổ hợp của chúng ta có trong bản mã UTF8.
No comments :
Post a Comment