Skip to main content

Erro code 1271 - Illegal mix of collations for operation union

Esse erro acontece quando a gente tenta usar a cláusula UNION pra juntar duas consultas de tabelas diferentes, e o collation das tabelas é diferente.

Nesse caso, precisa descobrir o "character set" e o "collation" das duas tabelas, e alterar de alguma delas, pra que ambas fiquem iguais. De preferência alterar o da tabela que tiver menos dados, pra que a alteração seja mais rápida:

SHOW FULL COLUMNS FROM tabela;

SHOW CREATE TABLE tabela;

E o comando para alterar:

ALTER TABLE outratabela MODIFY coluna VARCHAR(150) CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Também pode acontecer um erro parecido, quando se consulta em uma view:

Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation '='

Neste caso, o campo que causava o erro era um campo "calculado" - ou seja, o valor dele não vinha do banco de dados, mas de uma cláusula IF. Isso porque o campo calculado herda o conjunto de caracteres (vulgo collation) do campo da tabela. Daí para evitar o erro precisamos forçar o collate na hora de criar os campos da view:

IF((`produto`.`categoria` <> 3), CONVERT('tipo_1' USING utf8), CONVERT('tipo_2' USING utf8)) AS `produto_categoria`