Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

codificação de caracteres estranha de dados armazenados, script antigo está mostrando-lhes bem um novo não


Em suma, porque isso já foi discutido mil vezes antes:
  1. PHP contém uma string, digamos "漢字" , codificado em UTF-8. Os bytes para isso são E6 BC A2 E5 AD 97 .
  2. Ele envia essa string por uma conexão de banco de dados definida como latin1 .
  3. O banco de dados recebe os bytes E6 BC A2 E5 AD 97 , pensando que eles representam latin1 personagens.
  4. O banco de dados armazena os caracteres æ¼¢å­ (os caracteres que E6 BC A2 E5 AD 97 mapeia para em latin1 ).
  5. O mesmo processo invertido faz com que o PHP receba os mesmos bytes, que são tratados como UTF-8. O roundtrip funciona bem para PHP, mesmo que o banco de dados não trate os caracteres como deveria.

Portanto, o problema aqui foi que a conexão do banco de dados foi definida incorretamente quando os dados foram inseridos no banco de dados. Você terá que converter os dados no banco de dados para os caracteres corretos. Tente isto:
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Talvez utf8 não é o que você precisa aqui, experimente. Se isso funcionar, mude para um UPDATE declaração para atualizar os dados permanentemente.