Erros de collation no MySQL costumam aparecer em momentos inesperados: ao fazer um JOIN, ordenar resultados, comparar textos, importar dados antigos ou migrar um sistema de uma versão para outra. Um dos erros mais conhecidos é o “Illegal mix of collations”, que indica que o banco está tentando comparar textos configurados com collations diferentes.
Embora pareça um detalhe técnico pequeno, a collation influencia diretamente como o MySQL compara, ordena e diferencia caracteres. Em sistemas brasileiros, isso pode afetar acentos, letras maiúsculas e minúsculas, buscas por nomes, ordenação alfabética e comparações entre campos de tabelas diferentes.
O que é charset e o que é collation?
O charset define o conjunto de caracteres que o banco consegue armazenar. Já a collation define as regras de comparação e ordenação desses caracteres. Por exemplo, duas colunas podem usar utf8mb4 como charset, mas collations diferentes, como utf8mb4_unicode_ci, utf8mb4_general_ci ou utf8mb4_0900_ai_ci.
O problema aparece quando uma consulta tenta comparar colunas com regras diferentes. Isso é comum em sistemas antigos que começaram com latin1, migraram parcialmente para utf8 ou misturam tabelas criadas em momentos diferentes.
Exemplo de erro comum
Imagine uma consulta que compara o e-mail de um usuário com o e-mail de outra tabela:
%%OZI_ILB_PROTECT_aa99481a5e146acc42cf7f1208ca9ea9%%
Se usuarios.email estiver em uma collation e clientes.email estiver em outra, o MySQL pode retornar um erro de comparação. Em outros casos, a consulta até funciona, mas produz ordenações estranhas ou comportamentos inconsistentes em filtros textuais.
Como identificar collations diferentes
O primeiro passo é verificar a configuração das colunas envolvidas. A consulta abaixo lista charset e collation das colunas de uma tabela específica.
%%OZI_ILB_PROTECT_d792866c50b9711f79cd5a200664b1c9%%
Para procurar diferenças em todo o banco, você pode remover o filtro da tabela e ordenar por collation:
%%OZI_ILB_PROTECT_5dd4db1e2786e5dee10b186d923d8634%%
Esse levantamento ajuda a entender se o problema está em uma coluna isolada ou se o banco inteiro foi criado com padrões misturados.
Corrigindo uma coluna específica
Quando o problema está em uma coluna pontual, a correção pode ser feita com ALTER TABLE. Antes de executar qualquer alteração estrutural, faça backup do banco e teste o comando em ambiente de homologação.
%%OZI_ILB_PROTECT_487f1fade04a58b34fb3bcdba5a4b241%%
É importante preservar o tipo da coluna, tamanho, nulidade, valor padrão e índices. Alterar uma coluna sem reproduzir sua definição completa pode causar efeitos colaterais indesejados.
Convertendo uma tabela inteira
Quando a tabela inteira precisa ser padronizada, pode ser usado o comando abaixo. Ele converte as colunas textuais da tabela para o charset e collation definidos.
%%OZI_ILB_PROTECT_fa810e5cdff76f24413d75d8c3f238f8%%
Essa abordagem é prática, mas precisa ser usada com cuidado em tabelas grandes, pois pode bloquear a tabela durante a conversão, dependendo da versão do MySQL, engine e ambiente. Em sistemas de produção, avalie janela de manutenção, backup, replicação e impacto nos usuários.
Qual collation escolher?
Em projetos atuais, o uso de utf8mb4 é recomendado por suportar melhor caracteres especiais, emojis e textos multilíngues. Quanto à collation, a escolha depende da versão do MySQL, compatibilidade com MariaDB e padrão do sistema.
Em bases modernas com MySQL 8, é comum encontrar utf8mb4_0900_ai_ci. Em ambientes que precisam manter compatibilidade ampla, inclusive com MariaDB ou sistemas legados, muitas equipes ainda optam por utf8mb4_unicode_ci. O mais importante é evitar mistura desnecessária entre tabelas que precisam se relacionar.
Também temos um conteúdo complementar sobre migração de charset no artigo Guia prático: convertendo seu MySQL de utf8 para utf8mb4 sem cair em armadilhas.
Correção temporária na query
Em alguns casos emergenciais, é possível forçar a collation em uma comparação específica. Isso pode resolver um erro imediato, mas não substitui a correção estrutural.
%%OZI_ILB_PROTECT_3cd42611bfab71949673d9aea50c5e5d%%
Essa solução deve ser usada apenas quando não for possível alterar a estrutura do banco naquele momento. O ideal é corrigir a origem do problema para evitar consultas mais complexas, lentas e difíceis de manter.
Conclusão
Erros de collation no MySQL geralmente indicam falta de padronização na estrutura do banco de dados. A correção exige identificar quais colunas estão divergentes, escolher um padrão adequado, testar a alteração e executar a conversão com segurança.
A Saldaris Consultoria atua com diagnóstico de erros em MySQL, MariaDB, sistemas PHP, WordPress, CodeIgniter e aplicações corporativas. Se sua empresa enfrenta erros de comparação, caracteres quebrados ou falhas em consultas SQL, entre em contato pelo formulário abaixo.

