Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pengkodean karakter aneh dari data yang disimpan, skrip lama menunjukkan kepada mereka yang baru tidak

Singkatnya, karena ini telah dibahas ribuan kali sebelumnya:

  1. PHP menyimpan string, ucapkan "漢字" , dikodekan dalam UTF-8. Byte untuk ini adalah E6 BC A2 E5 AD 97 .
  2. Ini mengirimkan string ini melalui koneksi database yang disetel ke latin1 .
  3. Database menerima byte E6 BC A2 E5 AD 97 , berpikir itu mewakili latin1 karakter.
  4. Database menyimpan karakter æ¼¢å­ (karakter yang E6 BC A2 E5 AD 97 dipetakan ke dalam latin1 ).
  5. Proses yang sama dibalik membuat PHP menerima byte yang sama, yang kemudian diperlakukan sebagai UTF-8. Pulang pergi bekerja dengan baik untuk PHP, meskipun database tidak memperlakukan karakter sebagaimana mestinya.

Jadi masalahnya di sini adalah koneksi database yang salah ketika data dimasukkan ke dalam database. Anda harus mengonversi data dalam database ke karakter yang benar. Coba ini:

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

Mungkin utf8 bukan yang Anda butuhkan di sini, bereksperimen. Jika berhasil, ubah ini menjadi UPDATE pernyataan untuk memperbarui data secara permanen.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Fungsi TRIM() Bekerja di MySQL

  2. SQL Server setara dengan fungsi substring_index di MySQL

  3. Kesalahan sintaks karena menggunakan kata yang dicadangkan sebagai nama tabel atau kolom di MySQL

  4. Rekayasa Balik Database MySQL menggunakan MySQL Workbench

  5. Apa perbedaan antara INNER JOIN, LEFT JOIN, RIGHT JOIN dan FULL JOIN?