- 1 1. Introdução
- 2 2. Conhecimento Básico sobre Conjuntos de Caracteres e Collations do MySQL
- 3 3. Como Verificar o Conjunto de Caracteres Atual no MySQL
- 4 4. Como Configurar e Alterar Conjuntos de Caracteres
- 5 5. Diferenças Entre utf8 e utf8mb4
- 6 6. Causas e Soluções para Problemas de Codificação (Mojibake)
- 7 7. Seção de Perguntas Frequentes
- 8 8. Conclusão
1. Introdução
MySQL é um sistema de gerenciamento de banco de dados amplamente usado em diversas aplicações. Entre seus muitos elementos de configuração, as definições de conjunto de caracteres são criticamente importantes porque afetam diretamente a integridade dos dados e o desempenho. No entanto, muitos desenvolvedores encontram problemas porque não estão totalmente cientes de como configurar e verificar corretamente os conjuntos de caracteres.
Este artigo foca em como verificar as configurações de conjunto de caracteres do MySQL, explica como modificá‑las, esclarece as diferenças entre utf8 e utf8mb4 e aborda estratégias práticas para prevenir problemas de codificação. Ao ler este guia, você obterá tanto conhecimento fundamental quanto habilidades práticas relacionadas ao gerenciamento de conjuntos de caracteres no MySQL.
2. Conhecimento Básico sobre Conjuntos de Caracteres e Collations do MySQL
O que é um Conjunto de Caracteres?
Um conjunto de caracteres é um sistema de codificação que permite aos computadores representar texto como dados digitais. Por exemplo, UTF‑8 é amplamente usado porque suporta uma ampla gama de idiomas em todo o mundo. No MySQL, utf8 e latin1 foram frequentemente usados como conjuntos de caracteres padrão, mas nos últimos anos, utf8mb4 tornou‑se o padrão recomendado.
O que é uma Collation?
Uma collation define as regras para comparar e ordenar strings. Por exemplo, utf8_general_ci e utf8_unicode_ci são ambas collations para UTF‑8, mas utf8_unicode_ci fornece comparações mais precisas com base no padrão Unicode.
A Relação entre Conjuntos de Caracteres e Collations
Um conjunto de caracteres define como os caracteres são codificados, enquanto uma collation define como esses caracteres codificados são comparados e ordenados. Selecionar combinações apropriadas ajuda a prevenir problemas de codificação e degradação de desempenho.
3. Como Verificar o Conjunto de Caracteres Atual no MySQL
No MySQL, os conjuntos de caracteres são configurados em múltiplos níveis: nível do servidor, nível do banco de dados, nível da tabela e nível da coluna. Abaixo estão os métodos para verificar as configurações de conjunto de caracteres em cada nível.
Verificar as Configurações de Conjunto de Caracteres do Servidor
Para verificar a configuração de conjunto de caracteres ao nível do servidor, execute o seguinte comando:
SHOW VARIABLES LIKE 'character_set_%';
A saída será semelhante ao seguinte:
+--------------------------+------------------+
| Variable_name | Value |
+--------------------------+------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+------------------+
Significado de cada item:
character_set_server: Conjunto de caracteres padrão do servidor.character_set_database: Conjunto de caracteres padrão do banco de dados.
Verificar o Conjunto de Caracteres de um Banco de Dados Específico
Para confirmar a configuração de conjunto de caracteres de um banco de dados específico, use o seguinte comando:
SHOW CREATE DATABASE database_name;
Exemplo de saída:
CREATE DATABASE `database_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
Verificar o Conjunto de Caracteres de Tabelas e Colunas
Para verificar o conjunto de caracteres de uma tabela ou de suas colunas, use os seguintes comandos.
Nível da Tabela:
SHOW CREATE TABLE table_name;
Nível da Coluna:
SHOW FULL COLUMNS FROM table_name;
Exemplo de saída:
+----------------+--------------+----------------------+-------+
| Field | Type | Collation | Null |
+----------------+--------------+----------------------+-------+
| column_name | varchar(255) | utf8mb4_unicode_ci | YES |
+----------------+--------------+----------------------+-------+
Usando esses comandos, você pode confirmar se os conjuntos de caracteres estão configurados corretamente em cada nível.
4. Como Configurar e Alterar Conjuntos de Caracteres
O método para alterar conjuntos de caracteres no MySQL difere dependendo se você está modificando o nível do servidor, nível do banco de dados, nível da tabela ou nível da coluna. Abaixo está uma explicação detalhada de cada método de configuração.
Alterando Configurações de Servidor
Para modificar o conjunto de caracteres padrão ao nível do servidor, edite o arquivo de configuração do MySQL (normalmente my.cnf ou my.ini).
Etapas de Configuração:
- Abra o arquivo de configuração.
sudo nano /etc/my.cnf
- Adicione ou modifique as seguintes configurações:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
- Reinicie o servidor MySQL.
sudo systemctl restart mysqld
Alterando Configurações ao Nível de Banco de Dados
Para alterar o conjunto de caracteres de um banco de dados específico, use o comando a seguir:
Comando de Modificação:
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Exemplo:
ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Este comando altera o conjunto de caracteres padrão para o banco de dados, mas não afeta tabelas ou dados já armazenados. Se precisar modificar tabelas também, consulte a próxima seção.
Alterando Configurações ao Nível de Tabela
Para modificar o conjunto de caracteres de uma tabela existente, use o comando a seguir:
Comando de Modificação:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Exemplo:
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Este comando também atualiza o conjunto de caracteres de todas as colunas dentro da tabela.
Alterando Configurações ao Nível de Coluna
Se precisar mudar o conjunto de caracteres de uma coluna específica apenas, use o comando a seguir:
Comando de Modificação:
ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Exemplo:
ALTER TABLE users MODIFY username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. Diferenças Entre utf8 e utf8mb4
Diferenças Técnicas
- utf8 : No MySQL, utf8 é na verdade um subconjunto do UTF‑8 e suporta até 3 bytes por caractere. Por causa dessa limitação, não pode armazenar emojis ou certos caracteres especiais (por exemplo, 𠮷).
- utf8mb4 : Implementação completa do UTF‑8 que suporta até 4 bytes por caractere.
Por que utf8mb4 é Recomendado
- Compatibilidade : Aplicações web e móveis modernas frequentemente lidam com emojis e caracteres especiais.
- Padronização : Muitas plataformas CMS (por exemplo, WordPress) recomendam utf8mb4 como o conjunto de caracteres padrão.
Considerações Importantes ao Migrar
Ao migrar de utf8 para utf8mb4, preste atenção aos seguintes pontos:
- Tamanho do Banco de Dados : Como o utf8mb4 pode usar até 4 bytes por caractere, o tamanho do banco de dados pode aumentar.
- Dados Existentes : É altamente recomendável fazer backup dos seus dados antes de efetuar alterações.
- Configuração da Aplicação : O conjunto de caracteres usado pela aplicação (por exemplo, conjunto de caracteres da conexão do cliente) também deve ser definido como utf8mb4.
6. Causas e Soluções para Problemas de Codificação (Mojibake)
Principais Causas de Problemas de Codificação
- Incompatibilidade de Conjunto de Caracteres entre Cliente e Servidor
- Exemplo: O cliente usa
latin1enquanto o servidor usautf8mb4.
- Migração de Dados Impropria
- O conjunto de caracteres não é especificado corretamente ao importar dados.
- Mau Configuração da Aplicação
- O conjunto de caracteres especificado durante a conexão ao banco de dados está incorreto.
Medidas Práticas para Prevenir Problemas de Codificação
- Verificar e Padronizar as Configurações do Servidor
- Verifique as configurações de conjunto de caracteres do servidor e mantenha a consistência em todos os níveis.
SHOW VARIABLES LIKE 'character_set_%';
- Ajustar as Configurações do Cliente
- Especifique explicitamente o conjunto de caracteres ao estabelecer uma conexão do cliente.
SET NAMES utf8mb4;
- Tenha Cuidado Durante a Migração de Dados
- Especifique o conjunto de caracteres correto ao importar dados.
mysql --default-character-set=utf8mb4 -u username -p database_name < dump.sql
7. Seção de Perguntas Frequentes
Perguntas Frequentes
- Alterar para utf8mb4 afeta o desempenho?
- Como o utf8mb4 pode aumentar o tamanho dos dados, pode haver um pequeno impacto de desempenho em bancos de dados de grande escala. No entanto, em ambientes de produção típicos, isso raramente se torna um problema significativo.
- Existe algum risco ao migrar de utf8 para utf8mb4?
- O processo de migração em si não é inerentemente arriscado. Contudo, para evitar perda de dados ou problemas na aplicação durante a conversão de caracteres, é essencial fazer um backup completo antecipadamente.
- O que muda ao modificar a collation?
- Ela permite comparações e ordenações de strings mais precisas. Para aplicações multilíngues,
utf8mb4_unicode_cié recomendado.
8. Conclusão
Neste artigo, explicamos como verificar os conjuntos de caracteres do MySQL, como configurá‑los e modificá‑los, as diferenças entre utf8 e utf8mb4 e como prevenir problemas de codificação. A configuração do conjunto de caracteres é um aspecto fundamental da gestão de bancos de dados, e configurações corretas contribuem diretamente para prevenir erros e melhorar o desempenho. Use este guia como referência para selecionar e configurar o conjunto de caracteres adequado ao seu projeto.


