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:

  1. Convertendo o charsets de banco de dados (em inglês);
  2. 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.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *