2010-12-14 10 views

Respuesta

13

Esta pregunta no es significativa en el contexto de SQLite, ya que solo admite un solo tipo de campo TEXT. La distinción de "ancho fijo" frente a "longitud variable" no existe aquí.

Mientras que SQLite le permite definir un campo como de cierto tipo, todo lo que hace es (como máximo) establecer la preferencia del campo para el tipo que se utilizará cuando se almacenan datos ambiguos (por ejemplo, si se almacenará "3" como INTEGER, REAL o TEXT). Todavía puede almacenar cualquier tipo de datos en cualquier campo SQLite, independientemente de su tipo.

Específicamente en relación con CHAR vs VARCHAR, http://www.sqlite.org/datatype3.html nos dice:

Si el tipo declarado de la columna contiene cualquiera de las cadenas "CHAR", "CLOB", o "TEXTO", entonces eso la columna tiene afinidad de TEXTO. Observe que el tipo VARCHAR contiene la cadena "CHAR" y por lo que se le asigna afinidad de TEXTO.

+0

Pero también podría eliminar todas las columnas text/varchar/char de una tabla. Entonces sería ancho fijo. Mi pregunta es si esto permitiría o no una búsqueda más rápida de la columna (que no sea solo de pequeño tamaño). – David

+5

No, no lo haría. Como explica el documento vinculado, SQLite usa tipos de campos dinámicos. Incluso si declara un campo como INTEGER, aún puede almacenar flotantes, texto o incluso blobs en él. La declaración "INTEGER" le da al campo una preferencia para almacenar datos como enteros, pero no lo restringe para hacerlo. Todavía sería una columna/registro de ancho variable. (Y eso incluso ignora el detalle de que INTEGER no es de tamaño fijo en SQLite de todos modos ...) –

5

Dado que SQLite uses variable-length records solamente, supongo que no implementaron la optimización de búsqueda de ancho de reparación cuando las filas tienen la misma longitud.

Y como Dave señaló, todavía se puede almacenar texto en los campos INT. Desde SQLite never truncates data, esto significa que SQLite permite una columna de ancho aparentemente fijo como INT para almacenar también datos de longitud variable. Por lo tanto, es imposible implementar la optimización de búsqueda de ancho fijo.

Cuestiones relacionadas