Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: Chuyển đổi dữ liệu sai encoding sang UTF-8 (CONVERT + binary)

Khi dữ liệu bị mã hóa sai (ví dụ: lưu UTF-8 nhưng đọc như latin1), dùng CONVERT() lồng nhau với từ khóa binary để khôi phục.

Cú pháp

SELECT CONVERT(BINARY CONVERT(ten_cot USING latin1) USING utf8) AS ten_moi 
FROM ten_bang;

Giải thích quy trình

  1. CONVERT(ten_cot USING latin1): Giải thích bytes hiện tại theo latin1
  2. BINARY ...: Ép kiểu sang binary string (giữ nguyên bytes)
  3. CONVERT(... USING utf8): Giải thích bytes đó theo UTF-8

Ví dụ minh họa

Tạo bảng và chèn dữ liệu bị mã hóa sai (hiển thị ’ thay cho '):

mysql> CREATE TABLE UtfDemo (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> Ten VARCHAR(15),
    -> PRIMARY KEY(Id)
    -> );

mysql> INSERT INTO UtfDemo(Ten) VALUES('Obama’s'), ('John’s'), ('Carol’s'), ('Sam’s');

Dữ liệu hiển thị sai:

+----+----------------+
| Id | Ten            |
+----+----------------+
| 1  | Obama’s       |
| 2  | John’s        |
| 3  | Carol’s       |
| 4  | Sam’s         |
+----+----------------+

Sửa encoding

mysql> SELECT CONVERT(BINARY CONVERT(Ten USING latin1) USING utf8) AS TenDung 
    -> FROM UtfDemo;

Kết quả đúng:

+------------+
| TenDung    |
+------------+
| Obama’s    |
| John’s     |
| Carol’s    |
| Sam’s      |
+------------+

Lưu ý: MySQL 8.0+ mặc định dùng utf8mb4. Thay utf8 bằng utf8mb4 để hỗ trợ emoji và ký tự 4-byte.