Introdução: Por que a questão da collation no MySQL ainda é relevante?
Se você já enfrentou a tarefa de configurar um banco de dados MySQL para uma aplicação PHP, provavelmente já viu termos misteriosos como utf8mb4_general_ci ou latin1_swedish_ci no phpMyAdmin ou em arquivos de configuração. A pergunta "Qual é a melhor collation para usar no MySQL com PHP?" é uma das mais populares no Stack Overflow, e por um bom motivo.
Escolher a codificação errada pode fazer com que letras russas virem rabiscos, a ordenação de dados quebre e os emojis (sim, aqueles smileys) simplesmente parem de ser salvos no banco de dados. Neste tutorial, vamos descobrir de uma vez por todas qual collation escolher para um projeto PHP moderno, e vou mostrar o código de configuração passo a passo.
O que é collation no MySQL e por que é importante para o PHP?
Collation é um conjunto de regras pelas quais o MySQL compara strings. Ela determina:
- Insensibilidade a maiúsculas/minúsculas — se 'A' será igual a 'a' durante uma busca.
- Ordem de classificação — como as strings serão organizadas nos resultados da consulta.
- Suporte a caracteres — quais caracteres específicos (incluindo cirílico, hieróglifos, emojis) podem ser armazenados.
Isso é criticamente importante para um desenvolvedor PHP porque:
- Você trabalha com entrada do usuário (formulários, comentários, postagens).
- Aplicações modernas devem suportar Unicode (emojis, caracteres especiais).
- Collation incorreta quebra a comparação de strings em condições WHERE.
Principais tipos de collation: análise das opções populares
1. utf8_general_ci — o antigo padrão confiável
Por muito tempo, este foi o padrão de facto. É rápido, mas tem uma séria desvantagem: não suporta caracteres fora do Plano Multilíngue Básico (BMP). Isso significa que emojis 🚀, caracteres de idiomas antigos e hieróglifos chineses raros não serão salvos. Além disso, as regras de comparação são simplificadas (por exemplo, 'ß' pode não corresponder a 'ss' como em alemão).
2. utf8mb4_general_ci — uma versão melhorada
Aqui, mb4 significa "multibyte 4" — suporte para caracteres de 4 bytes. Isso já resolve o problema dos emojis. No entanto, as regras de comparação permanecem simplificadas. Se a precisão linguística não é importante para você (por exemplo, para um blog comum), esta é uma excelente escolha.
3. utf8mb4_unicode_ci — o padrão ouro (minha escolha)
Esta é a melhor collation para a maioria dos projetos PHP modernos. Ela usa o Algoritmo de Collation Unicode (UCA), que:
- Lida corretamente com cirílico, latim e idiomas asiáticos.
- Ordena strings alfabeticamente de forma adequada (por exemplo, 'ё' e 'е' ficarão próximos, não em lugares diferentes).
- Suporta emojis e todos os caracteres Unicode.
A única desvantagem é que é ligeiramente mais lenta que general_ci, mas em 99% dos casos a diferença é imperceptível.
4. utf8mb4_unicode_520_ci e utf8mb4_0900_ai_ci — as versões mais recentes
Opções melhoradas apareceram no MySQL 8.0. utf8mb4_0900_ai_ci é o padrão mais moderno baseado no Unicode 9.0. É ainda mais preciso, mas requer MySQL 8.0+. Se sua hospedagem suportar, use-o. Para versões mais antigas (MySQL 5.7 e inferiores), use utf8mb4_unicode_ci.
Tutorial passo a passo: configurando collation para um projeto PHP
Vamos à prática. Vou mostrar como configurar corretamente uma conexão MySQL para que sua aplicação PHP funcione com utf8mb4_unicode_ci.
Passo 1: Escolhendo a codificação para o banco de dados e tabelas
Crie um banco de dados com uma especificação explícita de codificação. Você pode fazer isso via SQL ou phpMyAdmin:
CREATE DATABASE my_database CHARAC