A maneira mais fácil de corrigir problemas de encoding entre UTF-8 e Latin1 migrando banco de dados antigos

Era uma vez, um site muito antigo, com um banco de dados todo bagunçado, um parte está com conteúdos salvos em utf-8, outro pedaço em latin-1 e outro pedaço em sei lá o que…. Já deu pra sentir que daí se inicia uma longa e dolorosa jornada. Encoding hoje está simplificado com o utf-8, no entanto, em projetos antigos você vai se deparar com alguns sites utilizando o famoso ISO-8859-1 também conhecido como latin1 que utiliza latin1_swedish_ci para dados como textos em português contendo os benditos(malditos!) acentos.

A WeBizz recebeu a nobre tarefa de reformular um portal de notícias de Patos -PB, o Patos TV, o site foi desenvolvido utilizando um misto de wordpress com uma plataforma de gestão customizada, o problema não é fazer o site, o problema é manter as milhares de postagens do portal de notícias, visto o tópico/problema em questão, me deparei com uma situação não tão complicada mas que pode deixar você louco se não tiver calma e prestar atenção no que está fazendo.

Vamos lá.

MySQL originalmente usava o character set latin1 como padrão que armazena sequências em um formato de 2-byte. Nas versões mais recentes o padrão é UTF-8 que é mais amigável para usuários internacionais.

Quando migrando bancos de dados MySQL, ocasionalmente encontramos caracteres estranhos aparecendo no sistema, por exemplo: “Serviços Públicos”, “José“, “situação”.

Isto acontece quando o MySQL está tentando exibir caracteres usando um set de caractere diferente daquele que está armazenado. Pra corrigir, quando for exportar seu banco de dados antigo, tenha certeza de que você está exportando ele como latin1 (mesmo se colunas em sua estrutura utilizem utf8_unicode_ci por exemplo), então você irá recodificar em UTF-8 durante a importação em sua nova tabela.

Exportar:


mysqldump -u $user -p --opt --quote-names --skip-set-charset \
--default-character-set=latin1 $dbname > dump.sql

Importar:


mysql -u $user -p --default-character-set=utf8 $dbname < dump.sql

Agradecimento especial ao Gareth S Price Consulting
pelas várias horas economizadas 😉

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *