En fin, porque de esto ya se ha hablado mil veces:
- PHP contiene una cadena, digamos
"漢字"
, codificado en UTF-8. Los bytes para esto sonE6 BC A2 E5 AD 97
. - Envía esta cadena a través de una conexión de base de datos que está establecida en
latin1
. - La base de datos recibe los bytes
E6 BC A2 E5 AD 97
, pensando que representanlatin1
personajes. - La base de datos almacena los caracteres
æ¼¢å
(los caracteres queE6 BC A2 E5 AD 97
se asigna a enlatin1
). - El mismo proceso invertido hace que PHP reciba los mismos bytes, que luego trata como UTF-8. El viaje de ida y vuelta funciona bien para PHP, aunque la base de datos no trata los caracteres como debería.
Entonces, el problema aquí fue que la conexión de la base de datos se configuró incorrectamente cuando se ingresaron los datos en la base de datos. Tendrá que convertir los datos de la base de datos a los caracteres correctos. Prueba esto:
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
Quizás utf8
no es lo que necesitas aquí, experimenta. Si eso funciona, cámbielo a UPDATE
declaración para actualizar los datos de forma permanente.