SQLite es sin tipo?

Si sqlite es sin tipo, ¿por qué declaramos el tipo de datos de la columna? ¿Cuál es el uso de declarar el tipo de datos?

¿Por qué Androidite SQLite puede almacenar doble valor (java 8 bytes) en la columna de flotación

Se utiliza para determinar la "afinidad" de la columna.

CREATE TABLE Example ( IntegerAffinity INTEGER, RealAffinitity REAL, NumericAffinity NUMERIC, TextAffinity TEXT, NoAffinity ); 

Insertar algunos valores en esta tabla (con sqlite3 módulo sqlite3 de Python) da):

 >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [1234] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", ['1234'] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [math.pi] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [str(math.pi)] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", ['ABC'] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [b'5678'] * 5) >>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [b'\xAB\xCD\xEF'] * 5) >>> list(db.execute("SELECT * FROM Example")) [(1234, 1234.0, 1234, '1234', 1234), (1234, 1234.0, 1234, '1234', '1234'), (3.141592653589793, 3.141592653589793, 3.141592653589793, '3.14159265358979', 3.141592653589793), (3.141592653589793, 3.141592653589793, 3.141592653589793, '3.141592653589793', '3.141592653589793'), ('ABC', 'ABC', 'ABC', 'ABC', 'ABC'), (b'5678', b'5678', b'5678', b'5678', b'5678'), (b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef')] 
  • En columnas de afinidad de texto, los números se convierten en cadenas.
  • En columnas de afinidad entera, real y numérica, las cadenas que contienen números se convierten en números.
  • Las cadenas que no contienen números siguen siendo cadenas, incluso en columnas numéricas.
  • Las burbujas siguen siendo blobs, independientemente de la afinidad de la columna.
  • En columnas con NINGUNA afinidad, los valores se insertan tal cual.

El tipo de datos de columna declarada se utiliza como una pista (http://sqlite.org/faq.html#q3):

Por ejemplo, si una columna es del tipo INTEGER e intenta insertar una cadena en esa columna, SQLite intentará convertir la cadena en un entero. Si puede, inserta el entero en su lugar. Si no, inserta la cadena. Esta característica se llama afinidad de tipo.

Por cierto, SQLite no es sin tipo; Utiliza el tipo dinámico. Esto significa que cualquier valor que inserte mantiene su propia información de tipo, en lugar de inferir el tipo de la declaración de tabla. http://sqlite.org/datatype3.html

Echa un vistazo a la documentación. http://sqlite.org/datatype3.html

Con el fin de maximizar la compatibilidad entre SQLite y otros motores de base de datos, SQLite soporta el concepto de "afinidad de tipo" en las columnas. El tipo de afinidad de una columna es el tipo recomendado para los datos almacenados en esa columna. La idea importante aquí es que el tipo se recomienda, no es necesario . Cualquier columna todavía puede almacenar cualquier tipo de datos. Es sólo que algunas columnas, dada la opción, preferirán usar una clase de almacenamiento sobre otra. La clase de almacenamiento preferida para una columna se llama su "afinidad".

Parece que están tratando de mantener la compatibilidad con otros DBMS.

También quieren ser capaces de hacer lo siguiente:

… pequeños valores de punto flotante sin componente fraccionario y almacenados en columnas con afinidad REAL se escriben en disco como números enteros para ocupar menos espacio y se convierten automáticamente de nuevo en punto flotante a medida que se lee el valor.

En última instancia, la afinidad de una columna se determina por el tipo declarado de la columna, por lo que se declara el tipo de la columna.

  • Cómo obtener los nombres de todas las tablas presentes en una base de datos en Android lite de SQL
  • Los datos guardados se perdieron al reiniciar la aplicación (android)
  • La base de datos SQLite ..onCreate () no se está llamando
  • Android SQLite Dónde y cuándo inicializar SQLiteOpenHelper
  • Esquema de la base de datos de Android Sqlite
  • Calcular la distancia entre dos puntos directamente en SQLite
  • Excepción "tabla ... no tiene columna nombrada ..."
  • El error del cursor en Android me dice que la columna no existe
  • Android actualización SQLite DB esquema?
  • Android SQLiteConstraintException: código de error 19: error de restricción
  • SQLiteException: tabla ya existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.