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

mã hóa ký tự lạ của dữ liệu được lưu trữ, tập lệnh cũ hiển thị chúng tốt, tập lệnh mới thì không

Tóm lại, vì điều này đã được thảo luận hàng nghìn lần trước đây:

  1. PHP giữ một chuỗi, nói "漢字" , được mã hóa bằng UTF-8. Các byte cho điều này là E6 BC A2 E5 AD 97 .
  2. Nó gửi chuỗi này qua kết nối cơ sở dữ liệu được đặt thành latin1 .
  3. Cơ sở dữ liệu nhận các byte E6 BC A2 E5 AD 97 , nghĩ rằng chúng đại diện cho latin1 ký tự.
  4. Cơ sở dữ liệu lưu trữ các ký tự æ¼¢å­ (các ký tự E6 BC A2 E5 AD 97 ánh xạ tới bằng latin1 ).
  5. Quá trình tương tự được đảo ngược làm cho PHP nhận được các byte giống nhau, sau đó nó được coi là UTF-8. Roundtrip hoạt động tốt đối với PHP, mặc dù cơ sở dữ liệu không xử lý các ký tự như bình thường.

Vì vậy, vấn đề ở đây là kết nối cơ sở dữ liệu đã được đặt không chính xác khi dữ liệu được nhập vào cơ sở dữ liệu. Bạn sẽ phải chuyển đổi dữ liệu trong cơ sở dữ liệu sang các ký tự chính xác. Hãy thử điều này:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Có thể utf8 không phải là những gì bạn cần ở đây, hãy thử nghiệm. Nếu điều đó hoạt động, hãy thay đổi điều này thành UPDATE để cập nhật dữ liệu vĩnh viễn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trang web đa ngôn ngữ thực hành tốt nhất

  2. Cách xuất kết quả của một truy vấn bằng MySQL Workbench

  3. Cách tốt nhất để lưu trữ MySQL trên Azure Cloud

  4. Cập nhật giá trị cột, thay thế một phần của chuỗi

  5. Cài đặt Ruby gem mysql2 không thành công