Qu'est-ce que le mot-clé COLLATE faire lors de la création d'un indice de sqlite?
Question
Selon la documentation sqlite3 ,
La clause COLLATE après chaque nom de colonne définit un assemblage séquence utilisée pour les entrées de texte dans ce colonne. La séquence de classement par défaut est la séquence de classement défini pour cette colonne dans le CREATE TABLE déclaration. Ou si aucune séquence de classement est par ailleurs définie, le haut- séquence de classement BINARY est utilisée.
Qu'est-ce que une séquence de collationnement faire, et ce qui est une séquence de classement BINARY?
La solution
Il est ainsi que les commandes de moteur sql données en interne. Collation binaire fait ce qu'il suggère, il fait une comparaison binaire. En général, le classement de son plus rapide que je ne l'ai jamais quantifié, car il vérifie les modèles de bits, ce qui signifie qu'il est sans accent.
Autres conseils
classement binaire compare votre chaîne octet par octet, comme dans une table unicode. Par exemple: A, B, a, b. Un cas afin sensible serait:. A, A, b, B
L'avantage de classement binaire est sa vitesse, comme comparaison de chaînes est très simple / rapide. Dans le cas général, les index avec binaires pourraient ne pas produire les résultats attendus pour trier mais pour les correspondances exactes ils peuvent être utiles.
COLLATE NOCASE affecte également les requêtes sensibles à la casse.
Si vous avez une colonne avec ces valeurs: 'aa', 'aA'
select * from table where col = 'aa'
si vous avez créé votre colonne avec COLLATE NOCASE il retournera à la fois « aa » et « aA ». Dans le cas contraire, si vous ne l'avez pas spécifié, il retournera seulement « aa ».
Vous pouvez également spécifier dans une requête (ce qui est plus lent que si vous aviez créé votre colonne avec COLLATE NOCASE)
select * from table where col = 'aa' COLLATE NOCASE