Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để tránh các ký tự rác / rác trong khi đọc dữ liệu từ nhiều ngôn ngữ?

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ặc set_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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi nghiêm trọng:Không tìm thấy lớp 'Swift_smtpTransport' trong

  2. Với MySQL, làm cách nào để tạo cột chứa chỉ mục bản ghi trong bảng?

  3. Cách NOT REGEXP hoạt động trong MySQL

  4. PHP / MySQL - bao gồm số nhiều nhưng loại trừ số ít

  5. Kết nối MySQL qua đường hầm SSH