2009-04-28 18 views
8

Según la sqlite3 documentation,¿Qué hace la palabra clave COLLATE al crear un índice sqlite?

La cláusula COLLATE después de cada nombre de columna define un secuencia de clasificación utilizado para las entradas de texto de esa columna . La secuencia de clasificación predeterminada es la secuencia de clasificación definida para en la columna CREATE TABLE . O bien, si no se define ninguna secuencia de clasificación , se utiliza la secuencia de clasificación BINARY incorporada .

¿Qué hace una secuencia de clasificación, y qué es una secuencia de clasificación BINARIA?

Respuesta

5

Es la forma en que el motor sql ordena datos internamente. La intercalación binaria hace lo que sugiere, hace una comparación binaria. En general, es la recopilación más rápida, aunque nunca la he cuantificado, ya que comprueba los patrones de bits, lo que significa que es insensible a mayúsculas y minúsculas.

1

La intercalación binaria compara el byte de cadena por byte, como en una tabla Unicode. Por ejemplo: A, B, a, b. Una orden sensible a mayúsculas y minúsculas sería: a, A, b, B.

La ventaja de la intercalación binaria es su velocidad, ya que la comparación de cadenas es muy simple/rápida. En general, los índices con binario pueden no producir los resultados esperados para el género, sin embargo, para las coincidencias exactas pueden ser útiles.

COLLATE NOCASE también afecta las consultas sensibles a las mayúsculas y minúsculas.

Si usted tiene una columna con estos valores: 'AA', 'AA'

select * from table where col = 'aa' 

Si ha creado su columna con INTERCALAR NOCASE volverá tanto 'AA' y 'AA'. De lo contrario, si no lo especificó, devolverá solo 'aa'.

También se puede especificar en una sentencia (esto es más lento que si hubiera creado su columna con INTERCALAR NOCASE)

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