sql >> Base de Datos >  >> RDS >> Mysql

codificación de caracteres extraños de datos almacenados, el script antiguo los muestra bien, el nuevo no

En fin, porque de esto ya se ha hablado mil veces:

  1. PHP contiene una cadena, digamos "漢字" , codificado en UTF-8. Los bytes para esto son E6 BC A2 E5 AD 97 .
  2. Envía esta cadena a través de una conexión de base de datos que está establecida en latin1 .
  3. La base de datos recibe los bytes E6 BC A2 E5 AD 97 , pensando que representan latin1 personajes.
  4. La base de datos almacena los caracteres æ¼¢å­ (los caracteres que E6 BC A2 E5 AD 97 se asigna a en latin1 ).
  5. 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.