Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a diferença entre os conjuntos de caracteres utf8mb4 e utf8 no MySQL?


UTF-8 é uma codificação de comprimento variável. No caso de UTF-8, isso significa que armazenar um ponto de código requer de um a quatro bytes. No entanto, a codificação do MySQL chamada "utf8" (alias de "utf8mb3") armazena apenas um máximo de três bytes por ponto de código.

Portanto, o conjunto de caracteres "utf8"/"utf8mb3" não pode armazenar todos os pontos de código Unicode:ele suporta apenas o intervalo de 0x000 a 0xFFFF, que é chamado de "Plano multilíngue básico ".Veja também Comparação de codificações Unicode .

Isto é o que (uma versão anterior da mesma página em) a documentação do MySQL tem a dizer sobre isso:

O conjunto de caracteres denominado utf8[/utf8mb3] usa no máximo três bytes por caractere e contém apenas caracteres BMP. A partir do MySQL 5.5.3, o conjunto de caracteres utf8mb4 usa no máximo quatro bytes por caractere e suporta caracteres suplementares:

  • Para um caractere BMP, utf8[/utf8mb3] e utf8mb4 têm características de armazenamento idênticas:mesmos valores de código, mesma codificação, mesmo comprimento.

  • Para um caractere suplementar, utf8[/utf8mb3] não pode armazenar o caractere , enquanto utf8mb4 requer quatro bytes para armazená-lo. Como utf8[/utf8mb3] não pode armazenar o caractere, você não tem nenhum caractere suplementar nas colunas utf8[/utf8mb3] e não precisa se preocupar em converter caracteres ou perder dados ao atualizar dados utf8[/utf8mb3] de versões mais antigas do MySQL.

Portanto, se você deseja que sua coluna suporte o armazenamento de caracteres fora do BMP (e geralmente deseja), como emoji , use "utf8mb4". Consulte também Quais são os caracteres Unicode não BMP mais comuns em uso real? .