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

As strings UTF-8 em um banco de dados MySQL ficaram confusas após a alteração da configuração

C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA

Isso é o que você obtém se tratar a sequência de bytes como UTF-8 e depois codificá-la como ISO-8859-1. 3F é ? , que foi incluído como um caractere de substituição, porque UTF-8 C6 92 é U+0192 ƒ que não existe na ISO-8859-1. Mas existe na página de código 1252 da Europa Ocidental do Windows, uma codificação muito semelhante à ISO-8859-1; lá, é o byte 0x83.
C3 83 C2 AA

Passe por outra rodada de tratamento como UTF-8-bytes-and-encode-to-cp1252 e você obtém:
C3 AA

que é, finalmente, UTF-8 para ê .

Observe que, mesmo que você veicule uma página HTML não XML explicitamente como ISO-8859-1, os navegadores usarão a codificação cp1252, devido a motivos históricos desagradáveis.

Infelizmente o MySQL não tem uma codificação cp1252; latin1 é (corretamente) ISO-8859-1. Portanto, você não poderá corrigir os dados despejando como latin1 e recarregando como utf8 (duas vezes). Você teria que processar o script com um editor de texto que pode salvar como (ou, por exemplo, em Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252') ).