Mysql
 sql >> Database >  >> RDS >> Mysql

strana codifica dei caratteri dei dati memorizzati, il vecchio script li mostra bene, quello nuovo no

In breve, perché se ne è già parlato mille volte:

  1. PHP contiene una stringa, ad esempio "漢字" , codificato in UTF-8. I byte per questo sono E6 BC A2 E5 AD 97 .
  2. Invia questa stringa su una connessione al database impostata su latin1 .
  3. Il database riceve i byte E6 BC A2 E5 AD 97 , pensando che rappresentino latin1 caratteri.
  4. Il database memorizza i caratteri æ¼¢å­ (i caratteri che E6 BC A2 E5 AD 97 mappa in latin1 ).
  5. Lo stesso processo invertito fa sì che PHP riceva gli stessi byte, che poi tratta come UTF-8. Il roundtrip funziona bene per PHP, anche se il database non tratta i caratteri come dovrebbe.

Quindi il problema qui era che la connessione al database era impostata in modo errato quando i dati venivano inseriti nel database. Dovrai convertire i dati nel database nei caratteri corretti. Prova questo:

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

Forse utf8 non è quello che ti serve qui, sperimenta. Se funziona, cambialo in un UPDATE dichiarazione per aggiornare i dati in modo permanente.