Escolha da codificação MySQL para PHP: tutorial com solução

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Blogs

Book Recommendations