`utf8` x `utf8mb4` e collation
Pergunta
Por que usar `utf8` no MySQL é uma armadilha, e o que uma collation controla?
Resposta esperada
O `utf8` do MySQL (aka `utf8mb3`) só guarda até 3 bytes por caractere — não cabe emoji nem vários caracteres CJK e símbolos (que precisam de 4 bytes). Inserir um emoji numa coluna `utf8` dá erro ou trunca. O correto é `utf8mb4` (UTF-8 de verdade, 4 bytes) — hoje é o default em versões novas, mas bancos antigos ou configs herdadas ainda têm `utf8`. A COLLATION define as regras de comparação e ordenação de texto: se `'a' = 'A'` (case-insensitive vs sensitive), se `'e' = 'é'` (accent-insensitive), e a ordem alfabética por idioma. `utf8mb4_unicode_ci` / `utf8mb4_0900_ai_ci` são case- e accent-insensitive (bom pra busca amigável); `utf8mb4_bin` compara byte a byte. Cuidado: comparar colunas com collations diferentes num JOIN pode impedir o uso de índice e dar erro de 'illegal mix of collations'.
Por que perguntam isso
Pergunta pleno de MySQL. O 'utf8 não é UTF-8 completo' é um clássico. Sinal bom: 'illegal mix of collations' e collation impedindo índice.