Como corrigir erro de collation do banco de dados
O que é o erro de collation do banco de dados?
A collation é o conjunto de regras que o MySQL usa para comparar e ordenar texto, como tratar maiúsculas, acentos e qual charset adota. O WordPress moderno usa utf8mb4_unicode_ci, mas bancos antigos ou migrados misturam latin1, utf8 e utf8mb4 em tabelas diferentes. Quando uma consulta tenta unir colunas com collations incompatíveis, o MySQL não sabe qual regra aplicar e aborta a query com erro. A correção é padronizar charset e collation em todas as tabelas e colunas do banco.
Como identificar
- No log ou na tela aparece “Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation”.
- Buscas, filtros ou plugins que cruzam tabelas falham, enquanto páginas simples continuam abrindo.
- O erro surge logo após migrar o site para outro servidor ou importar um dump SQL antigo.
- A tela de Saúde do Site ou um plugin acusam tabelas com collation diferente da recomendada (utf8mb4_unicode_ci).
Antes de começar: Exporte o banco antes de converter a collation: o ALTER TABLE reescreve cada tabela e, em bancos com colunas mal definidas, pode truncar texto. Converta uma tabela por vez e confira o conteúdo após cada uma.
Como prevenir
- Padronize todo o banco em utf8mb4_unicode_ci e mantenha DB_COLLATE vazio no wp-config.php
- Ao migrar, exporte e importe o dump no mesmo charset de destino para evitar mistura de collations
- Antes de instalar plugins que criam tabelas, confira na Saúde do Site se a collation continua única
Causa
- Dump SQL antigo importado em latin1 ou utf8 enquanto o WordPress novo espera utf8mb4.
- Migração entre servidores com versões de MySQL diferentes, que aplicaram collations padrão distintas.
- Tabela criada por um plugin com collation própria, divergente das tabelas nativas do WordPress.
- Coluna específica com collation herdada do dump, diferente da collation declarada na tabela.
- wp-config.php com DB_CHARSET ou DB_COLLATE fixados em valores que não batem com o banco real.
Como resolver
- Faça backup do banco antes de tudo: exporte o banco completo pelo phpMyAdmin ou WP-CLI. Conversão de collation reescreve todas as tabelas, então o backup é obrigatório antes de qualquer ALTER.
- Descubra quais collations estão em uso: no phpMyAdmin (aba SQL), liste a collation de cada tabela para identificar quais divergem do padrão utf8mb4_unicode_ci.
SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE(); - Converta as tabelas para utf8mb4: rode o ALTER TABLE ... CONVERT TO em cada tabela divergente. Isso padroniza charset e collation da tabela e de todas as colunas de texto de uma vez.
- Alinhe o wp-config.php: via FTP, confirme que DB_CHARSET está como utf8mb4 e que DB_COLLATE está vazio. Um DB_COLLATE fixado em valor antigo força o WordPress a recriar tabelas com a collation errada.
- Limpe o cache e teste: limpe qualquer cache de objeto ou de página e refaça a operação que falhava. As consultas que misturavam collations passam a rodar com uma regra única.
SQL
-- Padroniza o banco inteiro em utf8mb4 / utf8mb4_unicode_ci
-- 1) Ajusta o charset padrao do banco (novas tabelas ja nascem corretas)
ALTER DATABASE nome_do_banco CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 2) Converte uma tabela e TODAS as suas colunas de texto de uma vez
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_postmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 3) Confere o resultado
SHOW TABLE STATUS WHERE Name = 'wp_posts';
Perguntas frequentes
O que significa Illegal mix of collations no WordPress?
Significa que uma consulta tentou comparar ou unir colunas com regras de ordenação diferentes, por exemplo utf8mb4_unicode_ci com utf8_general_ci. O MySQL não decide qual regra usar e aborta a query. A solução é converter todas as tabelas para a mesma collation.
Qual collation devo usar no WordPress?
O padrão recomendado é utf8mb4 com utf8mb4_unicode_ci. O utf8mb4 cobre emojis e caracteres de 4 bytes que o antigo utf8 não suporta. Use a mesma collation em todas as tabelas para que as consultas nunca misturem regras.
Converter a collation pode apagar meus dados?
A conversão não apaga linhas, mas reescreve cada tabela e, em colunas mal definidas, pode truncar texto longo. Por isso exporte o banco antes, converta uma tabela por vez e confira o conteúdo depois de cada ALTER TABLE.
Por que o erro só apareceu depois da migração?
Servidores com versões diferentes de MySQL aplicam collations padrão distintas ao importar o dump. O banco de origem podia estar todo em utf8, e o destino criou parte das tabelas em utf8mb4, gerando a mistura que dispara o erro.
Preciso mexer no wp-config.php para corrigir collation?
Em geral sim. Confirme DB_CHARSET como utf8mb4 e deixe DB_COLLATE vazio. Um DB_COLLATE fixado em collation antiga faz o WordPress recriar tabelas com a regra errada, e o erro volta na próxima atualização.
Como vejo a collation de cada tabela sem instalar nada?
No phpMyAdmin, abra a aba SQL e consulte a tabela information_schema.TABLES filtrando pelo seu banco. Ela lista cada tabela com sua TABLE_COLLATION, mostrando rapidamente quais divergem do padrão utf8mb4_unicode_ci.














