2009-04-28 20 views
8

Selon le sqlite3 documentation,Que fait le mot clé COLLATE lors de la création d'un index sqlite?

La clause COLLATE suivant chaque nom de colonne définit une séquence assemblage utilisé pour les entrées de texte dans cette colonne . La séquence de classement par défaut est la séquence de classement définie pour cette colonne dans l'instruction CREATE TABLE . Ou si aucune séquence de classement n'est définie, la séquence de classement BINARY intégrée est utilisée. Que fait une séquence d'assemblage, et qu'est-ce qu'une séquence d'assemblage BINAIRE?

Répondre

5

C'est la façon dont le moteur SQL commande les données en interne. Binary Collation fait ce qu'il suggère, il fait une comparaison binaire. En général, c'est le classement le plus rapide, bien que je ne l'ai jamais quantifié, car il vérifie les modèles de bits, ce qui signifie qu'il est insensible à l'accentuation et à la casse.

1

Le classement binaire compare votre octet de chaîne par octet, comme dans une table unicode. Par exemple: A, B, a, b. Un ordre sensible à la casse serait: a, A, b, B. L'avantage du classement binaire est sa vitesse, car la comparaison de chaînes est très simple/rapide. Dans le cas général, les index avec binary peuvent ne pas produire les résultats attendus pour le tri, 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 ». Sinon, 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