Depois de fazer a migração de um site WordPress para uma nova hospedagem, percebi que todos os emojis (como 😄 e 🧙♂️) dentro do conteúdo dos posts e páginas foram trocados por ? (interrogação). Este tipo de problema normalmente é causado por codificação incorreta, então comecei o processo de identificação da origem deste erro.
O primeiro passo foi descobrir se o problema ocorreu ao fazer a exportação ou a importação do banco de dados. No meu caso, eu havia feito a exportação com o WP-CLI, utilizando o comando padrão: wp db export
, e ao abrir o SQL em um editor de código (VSCode) verifiquei que os emojis já estavam trocados por ?
. Pesquisando um pouco descobri que o WP-CLI exportou por padrão com a codificação utf8
e o meu banco estava utilizando utf8mb4
.
Para resolver este problema precisei exportar o banco de dados novamente, mas agora passando a codificação específica como parâmetro: wp db export –default-character-set=utf8mb4 banco.sql. Depois verifiquei o arquivo da exportação no editor e o problema havia sido solucionado.
Se o problema tivesse acontecido na importação do banco de dados, era só adicionar o --default-character-set=CHARSET
no comando de importação, trocando o CHARSET
pela codificação do banco de destino. Se isto não funcionar, escrevi um outro tutorial sobre como ajeitar emojis trocados por interrogações (????) ao importar o banco de dados do WordPress que solucionou o meu problema.
Se você quiser saber mais informações sobre o assunto, recomendo a página da documentação oficial sobre os argumentos globais de banco de dados.
Caso 2: Site no ar (ou em produção)
Neste caso você só descobriu o problema quando o site já havia sido migrado e não é mais possível fazer uma nova importação e exportação do banco de dados original. No meu caso os emojis apareciam corretamente no editor, mas na visualização eles eram trocados por ????
.
Como primeiro passo da investigação fui verificar as informações do banco de dados. Para fazer isso, acessei no painel do WordPress o menu Ferramentas > Diagnóstico > Informação > Banco de dados
e descobri que os itens Charset do banco de dados
e Agrupamento do banco de dados (collation)
estavam vazios! Abrindo o wp-config.php
descobri que não havia um alinha para configurar o DB_CHARSET
e o valor do DB_COLLATE
estava vazio.
Para fazer a configuração correta, abri o gerenciador do banco de dados e descobri que as tabelas do WordPress (como a wp_posts
) estava com a colação utf8mb4_unicode_ci
. Com isso eu tinha todas as informações que precisava e fiz a seguinte configuração no wp-config.php
:
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', 'utf8mb4_unicode_ci');
Code language: PHP (php)
Pronto, os emojis voltara a funcionar corretamente! 🎉
Outros casos
Se o seu caso não se enquadrou em um dos dois listados acima, durante a minha pesquisa encontrei os seguintes links que podem ajudar:
- Convertendo o charsets de banco de dados (em inglês);
- Convertendo o WordPress de utf8 para utf8mb4 (em inglês).
Atenção: Antes de fazer qualquer alteração no banco de dados recomendo que você faça o backup completo do site.
Deixe um comentário