Qual é a diferença entre utf8mb4_0900_bin
vs utf8mb4_bin
agrupamentos binários?
relate perguntas
-
Existem ferramentas de benchmarking do MySQL? [fechado]
-
Onde posso encontrar o log lento do mysql?
-
Como posso otimizar um mysqldump de um banco de dados grande?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
-
Como um grupo pode rastrear alterações no esquema do banco de dados?
Existem três diferenças até onde posso dizer (de acordo com a documentação):
Mapeamentos de casos (para
LOWER()
/UPPER()
funções):https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html#charset-unicode-sets-uca
A diferença entre os dois agrupamentos neste contexto é que a
_0900_
versão, sendo baseada em uma versão mais recente do Unicode, provavelmente tem mais definições de mapeamento (e possivelmente até algumas correções).Preenchimento vs Sem Preenchimento (de espaços à direita):
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html#charset-unicode-sets-pad-attributes
Essencialmente,
utf8mb4_bin
ignora espaços à direita enquantoutf8mb4_0900_bin
não os ignora. Veja a documentação (link acima) para um exemplo.Classificação (somente desempenho, não a ordenação):
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html#charset-unicode-sets-collating-weights
Traduzindo isso para humano, eles estão dizendo que para um ponto de código como U + FF9D,
utf8mb4_bin
verá a sequência de bytes codificada em UTF-8 de EF BE 9D e a converterá em 00 FF 9D . Mas, nãoutf8mb4_0900_bin
irá convertê-lo no valor do ponto de código. Isso ocorre porque a sequência de bytes UTF-8 já é sequencial, portanto, a ordenação é a mesma para os valores de ponto de código. Então, por que se preocupar com essa etapa extra de conversão?