Como corrigir erro de charset no banco de dados
O que é o erro de charset do banco de dados?
O charset é o conjunto de caracteres que o banco usa para guardar texto. O WordPress moderno grava em utf8mb4, que cobre acentos, símbolos e emojis de 4 bytes. Quando a tabela está em latin1 ou no antigo utf8 e o site envia dados em utf8mb4, o MySQL grava ou lê os bytes com a codificação errada e o texto se corrompe na tela. Não há perda imediata de conteúdo, mas os caracteres aparecem trocados até que o charset da tabela e da conexão sejam alinhados.
Como identificar
- Acentos e cedilhas aparecem como “é”, “ã” ou “ç” no site e no painel.
- Emojis e símbolos somem ou viram um losango com ponto de interrogação “?” depois de salvos.
- O problema aparece logo após importar um dump SQL antigo ou migrar para outro servidor.
- Conteúdo digitado agora fica correto, mas posts antigos do banco continuam com caracteres quebrados.
Antes de começar: Exporte o banco antes de converter o charset. Converter tabelas que já guardam texto corrompido pode tornar o erro permanente. O caminho mais seguro é reimportar um dump exportado em utf8mb4 a partir de um backup íntegro.
Como prevenir
- Mantenha DB_CHARSET como utf8mb4 no wp-config.php e DB_COLLATE vazio
- Ao migrar, exporte e importe o dump sempre declarando utf8mb4 nas duas pontas
- Padronize todas as tabelas em utf8mb4 para acentos e emojis serem gravados sem corrupção
Causa
- Tabelas em latin1 ou utf8 enquanto o WordPress grava em utf8mb4, gravando os bytes com codificação trocada.
- Dump SQL exportado em um charset e importado em outro, sem declarar a codificação na importação.
- DB_CHARSET no wp-config.php definido como latin1 ou utf8, em vez de utf8mb4.
- Conexão do MySQL negociando um charset diferente do charset físico das tabelas.
- Conteúdo antigo gravado com codificação errada antes da migração, que permanece corrompido no banco.
Como resolver
- Faça backup do banco antes de tudo: exporte o banco completo. Conversão de charset reescreve as tabelas e, se feita sobre dados já corrompidos, pode fixar o erro, então o backup permite voltar atrás.
- Confira o charset atual das tabelas: no phpMyAdmin (aba SQL), veja o charset de cada tabela para saber quais estão em latin1 ou utf8 e precisam migrar para utf8mb4.
SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE(); - Alinhe o wp-config.php: via FTP, defina DB_CHARSET como utf8mb4 e deixe DB_COLLATE vazio. Isso garante que a conexão do WordPress fale o mesmo charset das tabelas.
- Converta as tabelas para utf8mb4: rode o ALTER TABLE ... CONVERT TO em cada tabela em charset antigo. Se o texto já estava corrompido na origem, reimporte um dump exportado corretamente em utf8mb4.
- Limpe o cache e revise o conteúdo: limpe o cache de página e de objeto e abra posts antigos. O texto novo já grava certo; posts que ficaram corrompidos antes da migração podem precisar de busca e substituição.
SQL
-- Confere o charset declarado pela conexao atual
SHOW VARIABLES LIKE 'character_set%';
-- Define o padrao do banco para utf8mb4 (vale para tabelas novas)
ALTER DATABASE nome_do_banco CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- Converte uma tabela existente e suas colunas de texto para utf8mb4
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Perguntas frequentes
Por que os acentos do meu site viraram é e ã?
Isso é texto utf8mb4 lido como se fosse latin1. A tabela ou a conexão está num charset que não bate com o conteúdo gravado. Alinhar DB_CHARSET para utf8mb4 e converter as tabelas para o mesmo charset corrige a exibição do texto novo.
Qual a diferença entre utf8 e utf8mb4 no WordPress?
O antigo utf8 do MySQL guarda no máximo 3 bytes por caractere e não cobre emojis nem alguns símbolos. O utf8mb4 usa até 4 bytes e suporta tudo. O WordPress moderno adota utf8mb4 por padrão, então é o charset recomendado para o banco.
Converter o charset recupera o texto já corrompido?
Não necessariamente. Se o texto foi gravado com codificação errada antes da migração, a conversão não o restaura sozinha. O caminho seguro é reimportar um dump exportado corretamente em utf8mb4 a partir de um backup íntegro.
Preciso mexer no wp-config.php?
Sim, confirme DB_CHARSET como utf8mb4 e deixe DB_COLLATE vazio. Se o wp-config fala um charset e as tabelas estão em outro, a conexão negocia a codificação errada e o texto continua aparecendo trocado mesmo após converter as tabelas.
O erro de charset pode aparecer só em emojis?
Sim. Se as tabelas estão no antigo utf8 de 3 bytes, acentos comuns funcionam, mas emojis de 4 bytes somem ou viram o losango com interrogação ao salvar. Migrar o banco para utf8mb4 resolve, porque ele suporta caracteres de 4 bytes.
Como confirmo o charset que a conexão está usando?
No phpMyAdmin, abra a aba SQL e rode SHOW VARIABLES LIKE 'character_set%'. A saída mostra o charset do cliente, da conexão e do servidor, permitindo comparar com o charset físico das tabelas e achar a divergência.














