Gujarati bắt đầu રેલવે
, sửa? Và Malyalam bắt đầu നേപ
, sửa? Và tiếng Anh lẽ ra phải bao gồm Bureau’s
.
Đây là trường hợp cổ điển của
- Các byte bạn có trong máy khách được mã hóa chính xác trong utf8. (
Bureau
được mã hóa trong tập con Ascii / latin1 của utf8; nhưng’
không phải là dấu nháy đơn ascii.) - Bạn đã kết nối với
SET NAMES latin1
(hoặcset_charset('latin1')
hoặc ...), có thể theo mặc định. (Đáng lẽ ra nó phải làutf8
.) - Cột trong bảng đã được khai báo
CHARACTER SET latin1
. (Hoặc có thể nó đã được kế thừa từ bảng / cơ sở dữ liệu.) (Đáng lẽ ra nó phải làutf8
.)
Bản sửa lỗi cho dữ liệu là "ALTER 2 bước".
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
trong đó độ dài đủ lớn và "..." khác có bất kỳ giá trị nào khác (NOT NULL
, v.v.) đã có trên cột.
Thật không may, nếu bạn có nhiều cột để làm việc, sẽ cần rất nhiều ALTER. Bạn có thể (nên) MODIFY
tất cả các cột cần thiết cho VARBINARY
cho một bảng trong một cặp ALTERs
.
Bản sửa lỗi cho mã là thiết lập utf8 làm kết nối; điều này phụ thuộc vào api được sử dụng trong PHP. ALTERs
sẽ thay đổi định nghĩa cột.
Chỉnh sửa
Bạn có VARCHAR
với CHARACTER SET
sai . Do đó, bạn thấy Mojibake giống như રેલ
. Hầu hết các kỹ thuật chuyển đổi đều cố gắng bảo toàn રેલ
, nhưng đó không phải là thứ bạn cần. Thay vào đó, hãy thực hiện một bước đến VARBINARY
giữ nguyên các bit trong khi bỏ qua định nghĩa cũ về các bit đại diện cho các ký tự được mã hóa latin1. Bước thứ hai một lần nữa giữ nguyên các bit, nhưng bây giờ tuyên bố rằng chúng đại diện cho các ký tự utf8.