Qual é a diferença entre utf8 e utf8mb4?
Otimizar a codificação de caracteres MySQL na AlexHost: utf8 vs. utf8mb4
Porquê escolher a codificação correta na AlexHost? As codificações utf8 e utf8mb4 do MySQL lidam com a forma como seus dados – como texto, emojis ou caracteres multilíngues – são armazenados e exibidos. Escolher a codificação errada pode quebrar seu site ou aplicativo WordPress, especialmente com emojis ou caracteres raros. Os servidores VPS e dedicados de alto desempenho da AlexHost, com armazenamento NVMe e acesso root, facilitam a configuração e a migração para utf8mb4 para aplicações modernas e globais. Este guia compara utf8 e utf8mb4, explica por que utf8mb4 é o melhor e mostra como configurá-lo na AlexHost.
O que é utf8 no MySQL?
No MySQL, o conjunto de caracteres utf8 foi historicamente usado para armazenar dados Unicode. O seu objetivo era suportar todos os caracteres Unicode, tornando-o adequado para a maioria dos dados de texto, incluindo muitos idiomas e caracteres especiais. No entanto, a implementação utf8 do MySQL suporta apenas um subconjunto do padrão UTF-8 completo
Quantos Bytes o utf8 usa?
O conjunto de caracteres utf8 do MySQL codifica caracteres usando 1 a 3 bytes por carácter. Isto significa que não pode representar caracteres que requerem 4 bytes, tais como certos emojis, e alguns caracteres chineses, japoneses e coreanos (CJK) menos usados. Se tentar armazenar esses caracteres de 4 bytes numa coluna utf8, o MySQL devolverá um erro, causando falhas na inserção de dados.Exemplo de caracteres não suportados com utf8
- Emojis como 😊, 🚀, e ❤️.
- Alguns caracteres CJK raros.
- Símbolos matemáticos e outros símbolos Unicode especializados.
Esta limitação levou à introdução do utf8mb4 no MySQL
O que é utf8mb4 no MySQL?
O conjunto de caracteres utf8mb4 no MySQL é uma verdadeira implementação do padrão UTF-8 completo. Ele suporta de 1 a 4 bytes por caractere, permitindo a gama completa de caracteres Unicode. Isto inclui todos os caracteres que o utf8 suporta, bem como os caracteres adicionais de 4 bytes que o utf8 não suporta
Por que o utf8mb4 foi introduzido?
O MySQL introduziu o utf8mb4 para resolver as deficiências do utf8. Com utf8mb4, você pode armazenar qualquer caractere Unicode válido, incluindo emojis, notas musicais, símbolos matemáticos e todo o conjunto de caracteres CJK. Isto torna o utf8mb4 o conjunto de caracteres preferido para aplicações modernas que precisam de suportar uma vasta gama de dados de texto
Principais diferenças entre utf8 e utf8mb4
Caraterística | utf8 | utf8mb4 |
Bytes por carácter | 1-3 | 1-4 |
Cobertura do Unicode | Parcial (exclui caracteres de 4 bytes) | Total (suporta todo o Unicode) |
Suporte de emoji | Não | Sim |
Caracteres CJK | A maioria mas não todos | Todos |
Compatibilidade | Bases de dados antigas | Recomendado para novos projectos |
1. Comprimento dos bytes
A diferença mais significativa entre o utf8 e o utf8mb4 é o número de bytes que utilizam para armazenar caracteres. O utf8 suporta até 3 bytes, enquanto o utf8mb4 suporta até 4 bytes. Como resultado, o utf8mb4 pode armazenar uma gama mais alargada de caracteres Unicode
2. Emoji e caracteres especiais
Se precisar de armazenar emojis ou quaisquer caracteres especiais que necessitem de 4 bytes, o utf8mb4 é a única opção viável. Com o utf8, a tentativa de armazenar um carácter de 4 bytes resultará num erro, causando uma potencial perda de dados ou falhas nas aplicações
3. Compatibilidade com a base de dados
utf8 era o conjunto de caracteres padrão para muitas instalações antigas do MySQL, tornando-o compatível com sistemas legados. No entanto, para novos projectos e aplicações que precisam de suportar uma audiência global com diversos conjuntos de caracteres, utf8mb4 é agora a escolha recomendada
Porquê usar utf8mb4 em vez de utf8?
Dadas as limitações do utf8, usar o utf8mb4 é geralmente uma melhor escolha para aplicações modernas. Aqui estão algumas razões para preferir utf8mb4
- Suporte Unicode completo: utf8mb4 permite-lhe armazenar todos os caracteres Unicode, incluindo emojis, que estão a tornar-se cada vez mais comuns em conteúdos gerados pelo utilizador.
- Preparado para o futuro: À medida que novos caracteres são adicionados ao padrão Unicode, o utf8mb4 garante que seu banco de dados possa lidar com eles.
- Compatibilidade global: Com o utf8mb4, não precisa de se preocupar com a compatibilidade do conjunto de caracteres para diferentes idiomas e símbolos especiais.
Quando é que ainda se deve usar utf8?
Há alguns cenários em que o utf8 ainda pode ser considerado
- Espaço de armazenamento: Uma vez que o utf8mb4 usa até 4 bytes por carácter, pode resultar em tamanhos de base de dados ligeiramente maiores em comparação com o utf8. No entanto, esta diferença é frequentemente insignificante para a maioria das aplicações.
- Sistemas legados: Se tiver uma aplicação ou base de dados existente que utilize utf8 e não necessitar de armazenar caracteres de 4 bytes, a mudança poderá não ser necessária.
Como converter uma base de dados de utf8 para utf8mb4
Se decidir migrar uma base de dados MySQL existente de utf8 para utf8mb4, são necessários alguns passos para garantir uma transição suave. Aqui está um guia geral para converter a sua base de dados para usar utf8mb4
Passo 1: Faça uma cópia de segurança da sua base de dados
Antes de efetuar quaisquer alterações, faça sempre uma cópia de segurança da sua base de dados para evitar a perda de dados
mysqldump -u username -p database_name > database_backup.sql
#Etapa 2: Alterar o conjunto de caracteres e a intercalação
Execute os seguintes comandos SQL para alterar o conjunto de caracteres e a colação da sua base de dados, tabelas e colunas para utf8mb4
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
#Para cada tabela, execute
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Isto irá alterar o conjunto de caracteres e o agrupamento para a tabela especificada e as suas colunas
Etapa 3: Atualizar o arquivo de configuração
Para garantir que novas tabelas e colunas usem utf8mb4 por padrão, atualize seu arquivo de configuração do MySQL (my.cnf ou my.ini) com as seguintes configurações
[client]
#default-character-set = utf8mb4
[mysql]
#default-character-set = utf8mb4
#[mysqld]
#character-set-server = utf8mb4
#collation-server = utf8mb4_unicode_ci
Reinicie o MySQL para aplicar as alterações
sudo service mysql restart
Etapa 4: verificar as alterações
Verifique se o conjunto de caracteres foi atualizado com sucesso
SHOW VARIABLES LIKE 'character_set%';
#SHOW VARIABLES LIKE 'collation%';
O resultado deve mostrar utf8mb4 como o conjunto de caracteres da sua base de dados