Quels sont les effets à l'aide d'un classement binaire ont?
Tout en répondant à des cette question, j'ai des doutes sur quelque chose que je n'ai pas réussi à trouver une réponse suffisante à.
Quelles sont les différences concrètes entre l'utilisation de la binaire utf8_bin
et la casse utf8_general_ci
les classements?
Je vois trois:
-
Les deux ont un autre ordre de tri;
_bin
s'ordre de tri est susceptible de mettre les accents à la fin de l'alphabet, parce que les valeurs d'octets sont comparés (à droite?) -
Seulement de la casse recherches dans
_bin
-
Pas
A = Ä
l'égalité dans_bin
Existe-il d'autres différences ou des effets secondaires à être au courant?
Référence:
- 9.1.2. Jeux de caractères et les Classements en MySQL
- 9.1.7.6. Le _bin binaire et les Classements dans le manuel mySQL
- 9.1.7.7. L'Opérateur BINAIRE
Les mêmes questions que ne pas aborder la question:
Vous devez vous connecter pour publier un commentaire.
Classement binaire compare votre chaîne exactement comme strcmp() en C ferais, si les caractères sont différents (que ce soit juste au cas ou les signes diacritiques de différence). L'inconvénient de ce que l'ordre de tri n'est pas naturel.
Un exemple anormal de l'ordre de tri (comme dans "binaire" est) : A,B,A,b
Naturel de l'ordre de tri serait dans ce cas e.g : A,A,B,b (petits et des variations du fonds de la pme lettre sont triés les uns à côté des autres)
L'avantage pratique de classement binaire est sa vitesse, comme une chaîne de caractères comparaison est très simple/rapide. Dans le cas général, les index binaire peut ne pas produire les résultats attendus pour le tri, cependant, pour les correspondances exactes ils peuvent être utiles.
utf8_bin
: Compare les chaînes de caractères par la valeur binaire de chaque caractère dans la chaîne.utf8_general_ci
: Compare les chaînes de caractères à l'aide de la langue générale des règles et à l'aide de la casse des comparaisons.utf8_general_cs
: Compare les chaînes de caractères à l'aide de la langue générale des règles et à l'aide de la casse des comparaisons.Par exemple, la procédure suivante s'évaluer au vrai, avec le
UTF8_general
les classements, mais pas avec lautf8_bin
classement:Ä = A
Ö = O
Ü = U
Avec le
utf8_general_ci
classement, ils seraient également de retourtrue
même si c'est pas le même cas.http://www.phpbuilder.com/board/showpost.php?s=2e642ac7dc5fceca2dbca1e2b9c424fd&p=10820221&postcount=2
Autres réponses expliquer les différences.
Classement binaire peut être utile dans certains cas :
Dans tous ces cas, vous pouvez enregistrer un (petit) peu de cycles de cpu avec un classement binaire.
Avec utf8_general_ci, les matchs se produire sans prendre cas et accentuation en compte. Il peut être une bonne chose quand vous avez besoin d'effectuer des requêtes sur des mots.
Dans utf8_bin, le match se produit uniquement lorsque les chaînes sont strictement les mêmes. Les requêtes sont plus rapidement de cette façon.