2009-04-28 19 views
8

Secondo la sqlite3 documentation,Cosa fa la parola chiave COLLATE quando si crea un indice sqlite?

La clausola COLLATE segue ciascuna colonna definisce una collazione sequenza utilizzata per i testi nella colonna . La sequenza di fascicolazione predefinita è la sequenza di fascicolazione definita per quella colonna nell'istruzione CREATE TABLE . O se non è definita alcuna sequenza di confronto , viene utilizzata la sequenza di confronto BINARY incorporata .

Cosa fa una sequenza di confronto e che cos'è una sequenza di confronto BINARY?

risposta

5

È il modo in cui il motore sql ordina i dati internamente. Binary Collation fa ciò che suggerisce, fa un confronto binario. Generalmente è la raccolta più veloce anche se non l'ho mai quantificata, in quanto controlla i pattern a bit, il che significa che è case e accento insensibile.

1

Il confronto binario confronta la stringa byte per byte, come in una tabella unicode. Ad esempio: A, B, a, b. Un ordine case sensitive sarebbe: a, A, b, B.

Il vantaggio delle regole di confronto binarie è la sua velocità, in quanto il confronto tra stringhe è molto semplice/veloce. In generale, gli indici con binario potrebbero non produrre risultati attesi per l'ordinamento, tuttavia per corrispondenze esatte possono essere utili.

COLLATE NOCASE influisce anche su query sensibili al maiuscolo/minuscolo.

Se si dispone di una colonna con questi valori: 'aa', 'AA'

select * from table where col = 'aa' 

Se avete creato la colonna con COLLATE NOCASE tornerà sia 'AA' e 'AA'. Altrimenti, se non lo hai specificato, restituirà solo 'aa'.

È inoltre possibile specificare che in una query (questo è più lento quindi se si fosse creato il vostro colonna con COLLATE NOCASE)

select * from table where col = 'aa' COLLATE NOCASE