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.
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.
-- 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;














