Insert chữ tiếng việt trong bảng mysql bị lỗi font năm 2024

Cái này có 2 nguyên nhân bạn thử xem nhé 1. Khi tạo DB, bạn chọn encode là utf8_general_ci các table cũng để utf8_general_ci luôn nhé 2. Thêm dòng này vào trước câu insert của bạn mysql_query["SET NAMES 'UTF8'"]; Vi du:

include 'dbconnect.php'; mysql_query["SET NAMES 'utf8'"]; foreach[$rows as $row] { $sql = "INSERT INTO article[title, content] VALUES ['".$row['title']."', '".$row['content']."']"; $result = mysql_query[$sql]; }

Em đã làm được rồi. Nhưng cho em hỏi chút, khi em dùng json_encode để chuyển từ array sang json thì chữ tiếng việt nó biến thành những kí tự, không phải tiếng việt. Em có search trên mạng thì họ bảo đó là dạng khi chuyển sang json. Thế cho em hỏi khi lấy dữ liệu từ json, có cách nào chuyển lại font tiếng việt không ạ. Em xin cảm ơn.

Theo mình nghĩ đó là mã utf8 chắc convert được thử dùng tool này xem sao. Từ Utf8 thành unicode.

Lúc mới vào UIT :byebye: Học xong năm 1: :haha: Học xong năm 2: :sexy: Học xong năm 3: :baffle:

Bạn đăng nhập vào hosting đi tới phần quản lý cở sở dữ liệu database MySQL thông thường các hosting ở Việt Nam sử dụng PHPMyAdmin

  • Chọn Export [xuất file]
  • Export method / chọn "Custom - display all possible options"
  • Format / Chọn CSV

MySQL xuất file CSV - ảnh Panpic

Bạn kéo thanh cuộn trình duyệt xuống dưới:

  • Save output to a file / Character set of the file chọn "utf-8"
  • Format-specific options / Đánh dấu vào checkbox chọn "Put columns name in the first row"
    PHPMyAdmin xuất file CSV - ảnh Panpic

Sau đó nhấp chuột vào nút "Go" để xuất file CSV / Bạn đặt tên file và lưu vào ổ địa D của máy tính. Ví dụ: db-sua-loi-font-file.csv

Sửa lỗi font tiếng Việt file CSV

Nhấp chuột phải vào file bạn vừa xuất db-sua-loi-font-file.csv / Chọn "Edit with Notedpad++ hoặc chọn Open with / chọn More app / Tìm chương trình Notepadd++ bạn đã cài đặt ở ổ đĩa C của Windows:

C:\Program Files \ Notepad++ \ notedpad++.exe hoặc C:\Program Files [x86] \ Notepad++ \ notepad++.exe Nếu bạn chưa cài Notedpad++ bạn có thể download Notepad++ hoàn toàn miễn phí từ link: //notepad-plus-plus.org/

Mở file CSV với Notedpad++ ảnh Panpic

Sau khi đã mở file CSV với Notepad++ / trên menu Notepad++ bạn vào Encoding / UTF-8-BOM / Sau đó lưu lại

Hôm nay có ông anh nhờ kiểm tra giúp vì cần xuất data từ hệ thống quản lý đơn hàng cũ sang Google Sheets, sử dụng App Scripts để truy cập database sau đó lấy dữ liệu insert ra google sheets, nhưng gặp phải lỗi sai kí tự tiếng Việt.

Bên Website vẫn hiện đúng, nhưng trong data hiển thị sai ví dụ:

  • Chuyên mục sản phẩm “Bánh Nướng 4 Trứng” sẽ hiển thị là Bánh NÆ°á»›ng 4 Trứng

Sau khi kiểm tra thì thấy bên trong DB đã lưu sai như vậy chứ ko phải do cách insert phía google scripts, tìm hiểu tham khảo thấy bài viết giải thích về vấn đề này khá chi tiết trên StackOverFlow.

  • //stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what-i-see-is-not-what-i-stored

Như vậy chính xác vấn đề chúng ta cần giải quyết là trường hợp được gọi là Mojibake. Có từ khoá rồi, google sẽ ra cách fix phần data, nhưng để giải quyết triệt để thì cần fix 2 điểm:

1/ Sửa lỗi data hiện có

  • Kiểm tra lại Character Set & Collation của các table / column bị lỗi. Chuyển thành utf8 – utf8_unicode_ci hoặc utf8mb4 – utf8mb4_general_ci / utf8mb4_unicode_ci
  • Chạy MySQL Query để update lại data đã sai: [Thay table_name và column_name tương ứng]

    UPDATE table_name SET column_name = CONVERT[BINARY CONVERT[column_name USING latin1] USING utf8];

    • [Lệnh tham khảo fix tại //stackoverflow.com/questions/1476356/detecting-utf8-broken-characters-in-mysql]
    • Thành quả sau khi chạy lệnh, hú hồn!

2/ Sửa lỗi lưu từ phía code để data mới ko sai nữa

Cái này tuỳ vào source code tuy nhiên theo mình các framework mới, thông thường sẽ ko bị, source web cũ của ông anh dùng PHP5 và là code tự viết nên sẽ có nhiều khả năng, và trong trường hợp này là khai báo sai khi query MySQL, lỗi cũng khá phổ biến, nhưng cũng hơi khó nhận ra.

  • Lệnh sai: mysql_query[$this->conn,”SET NAMES ‘UTF-8‘”];
  • Lệnh đúng: mysql_query[$this->conn,”SET NAMES ‘UTF8‘”];

Test lại thêm dòng sản phẩm mới thấy dòng dữ liệu mới lưu đúng là tiếng Việt thì boom! Vậy là ổn rồi.

Chủ Đề