Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 27972|Resposta: 0

[Fonte] A diferença entre utf8 e utf8mb4 no MySQL

[Copiar link]
Postado em 2021-4-21 18:01:22 | | | |
Conjunto de caracteres desconhecido: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Introdução

O MySQL adicionou essa codificação utf8mb4 após a 5.5.3, o que significa que a maioria dos bytes é 4, e é especificamente usado para ser compatível com unicode de quatro bytes. Felizmente, utf8mb4 é um superconjunto do utf8, e nenhuma outra conversão é necessária além de mudar a codificação para utf8mb4. Claro, para economizar espaço, geralmente basta usar utf8.

2. Descrição do conteúdo

Como mencionado acima, já que o utf8 pode salvar a maioria dos caracteres chineses, por que usar o utf8mb4? O comprimento máximo de caracteres da codificação UTF8 suportada pelo MySQL é de 3 bytes, e se você encontrar um caractere largo de 4 bytes, inserirá uma exceção. O caractere Unicode máximo codificado por UTF-8 de três bytes é 0xffff, que é o plano multilíngue básico (BMP) no Unicode. Ou seja, qualquer caractere Unicode que não esteja no plano multitexto básico não pode ser armazenado usando o conjunto de caracteres utf8 do Mysql. Incluem emojis (Emoji é uma codificação Unicode especial comumente encontrada em telefones iOS e Android), muitos caracteres chineses incomumente usados, além de novos caracteres Unicode, entre outros.

3. A causa raiz do problema

O formato original UTF-8 usava de um a seis bytes e podia codificar até 31 caracteres. A especificação mais recente do UTF-8 usa apenas de um a quatro bytes e pode codificar até 21 bits, que é exatamente o que representa todos os 17 planos Unicode. UTF8 é um conjunto de caracteres no MySQL que suporta apenas caracteres UTF-8 com até três bytes de comprimento, que é o plano básico multitexto no Unicode.

Por que o UTF8 no Mysql só suporta caracteres UTF-8 com no máximo três bytes? Pensei nisso, talvez porque, quando o Mysql foi desenvolvido, o Unicode não tinha um plano auxiliar. Naquela época, o Comitê Unicode ainda sonhava com "65.535 caracteres são suficientes para o mundo inteiro". Os comprimentos das strings no Mysql contam caracteres em vez de bytes, e para tipos de dados CHAR, as strings precisam ser longas o suficiente. Ao usar o conjunto de caracteres utf8, o comprimento que precisa ser preservado é o comprimento maior de caracteres utf8 multiplicado pelo comprimento da string, então é natural limitar o comprimento máximo utf8 a 3, por exemplo, o Mysql CHAR(100) reterá 300 bytes. Quanto ao motivo de versões subsequentes não suportarem caracteres UTF-8 de 4 bytes, acho que uma é por questões de compatibilidade retroativa, e a outra é que caracteres fora do plano multilíngue básico raramente são usados.

Para salvar caracteres UTF-8 de 4 bytes no Mysql, é necessário o conjunto de caracteres utf8mb4, mas só é suportado após a versão 5.5.3 (veja versão: select version(); )。 Acho que, para melhor compatibilidade, você sempre deve usar utf8mb4 em vez de utf8.  Para dados do tipo CHAR, utf8mb4 consome mais espaço e, de acordo com a recomendação oficial do Mysql, use VARCHAR em vez de CHAR.







Anterior:Uso simples do framework ORM SqlSugar
Próximo:Cabeçalho de requisição HTTP Expect é explicado em detalhes
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com