En répondant à cette question , je suis devenue incertaine à propos de quelque chose à laquelle je n'ai pas réussi à trouver une réponse suffisante.
Quelles sont les différences pratiques entre l'utilisation du binaire utf8_bin
et des collations utf8_general_ci
insensibles à la casse?
Je peux en voir trois:
Les deux ont un ordre de tri différent; L'ordre de tri de _bin
est susceptible de placer des trémas à la fin de l'alphabet, car les valeurs d'octet sont comparées (non?)
Seules les recherches sensibles à la casse dans _bin
Pas d'égalité A = Ä
dans _bin
Y a-t-il d'autres différences ou effets secondaires à connaître?
Référence:
Des questions similaires qui ne traitent pas le problème:
Le classement binaire compare votre chaîne exactement comme le ferait strcmp () en C, si les caractères sont différents (que ce soit juste la casse ou la différence diacritique). L'inconvénient est que l'ordre de tri n'est pas naturel.
Un exemple d'ordre de tri non naturel (comme dans "binaire" est): A, B, a, b L'ordre de tri naturel serait dans ce cas, par exemple: A, a, B, b (petites et majeures variations de la mémoire) les lettres sont triées les unes à côté des autres)
L'avantage pratique du classement binaire est sa rapidité, car la comparaison de chaînes est très simple/rapide. En général, les index binaires peuvent ne pas produire les résultats attendus pour le tri, mais ils peuvent être utiles pour les correspondances exactes.
Les autres réponses expliquent bien les différences.
Le classement binaire peut être utile dans certains cas:
Dans tous ces cas, vous pouvez enregistrer un (peu) peu de cycles de processeurs avec un classement binaire.
Avec utf8_general_ci , les correspondances se font sans tenir compte de la casse ni de l’accentuation. Ce peut être une bonne chose lorsque vous devez effectuer des requêtes sur des mots.
Dans utf8_bin , la correspondance ne se produit que lorsque les chaînes sont strictement identiques. Les requêtes sont plus rapides de cette façon.