sql >> Base de Datos >  >> RDS >> SQLite

Tipos de datos SQLite

Resumen :en este tutorial, aprenderá sobre el sistema de tipos de datos SQLite y sus conceptos relacionados, como las clases de almacenamiento, la tipificación de manifiestos y la afinidad de tipos.

Introducción a los tipos de datos de SQLite

Si vienes de otros sistemas de bases de datos como MySQL y PostgreSQL, notarás que usan tipado estático . Significa que cuando declara una columna con un tipo de datos específico, esa columna solo puede almacenar datos del tipo de datos declarado.

A diferencia de otros sistemas de bases de datos, SQLite utiliza un sistema de tipo dinámico . En otras palabras, un valor almacenado en una columna determina su tipo de datos, no el tipo de datos de la columna.

Además, no tiene que declarar un tipo de datos específico para una columna cuando crea una tabla. En caso de que declare una columna con el tipo de datos entero, puede almacenar cualquier tipo de datos, como texto y BLOB, SQLite no se quejará de esto.

SQLite proporciona cinco tipos de datos primitivos a los que se hace referencia como clases de almacenamiento.

Las clases de almacenamiento describen los formatos que utiliza SQLite para almacenar datos en el disco. Una clase de almacenamiento es más general que un tipo de datos, por ejemplo, INTEGER clase de almacenamiento incluye 6 tipos diferentes de enteros. En la mayoría de los casos, puede usar clases de almacenamiento y tipos de datos indistintamente.

La siguiente tabla ilustra 5 clases de almacenamiento en SQLite:

Clase de almacenamiento Significado
NULO Los valores NULL significan información faltante o desconocida.
ENTERO Los valores enteros son números enteros (ya sean positivos o negativos). Un número entero puede tener tamaños variables como 1, 2,3, 4 u 8 bytes.
REAL Los valores reales son números reales con valores decimales que usan flotantes de 8 bytes.
TEXTO TEXT se utiliza para almacenar datos de caracteres. La longitud máxima de TEXTO es ilimitada. SQLite admite varias codificaciones de caracteres.
BLOQUEO BLOB significa un gran objeto binario que puede almacenar cualquier tipo de datos. El tamaño máximo de BLOB es, teóricamente, ilimitado.

SQLite determina el tipo de datos de un valor en función de su tipo de datos de acuerdo con las siguientes reglas:

  • Si un literal no tiene comillas ni punto decimal o exponente, SQLite asigna la clase de almacenamiento INTEGER.
  • Si un literal está entre comillas simples o dobles, SQLite asigna la clase de almacenamiento TEXT.
  • Si un literal no tiene comillas ni punto decimal ni exponente, SQLite asigna la clase de almacenamiento REAL.
  • Si un literal es NULL sin comillas, se le asignó una clase de almacenamiento NULL.
  • Si un literal tiene el X'ABCD' o x 'abcd', SQLite asignó la clase de almacenamiento BLOB.

SQLite no admite clases de almacenamiento de fecha y hora integradas. Sin embargo, puede usar TEXT, INT o REAL para almacenar valores de fecha y hora. Para obtener información detallada sobre cómo manejar los valores de fecha y hora, consulte el tutorial de fecha y hora de SQLite.

SQLites proporciona el typeof() función que le permite comprobar la clase de almacenamiento de un valor en función de su formato. Vea el siguiente ejemplo:

SELECT
	typeof(100),
	typeof(10.0),
	typeof('100'),
	typeof(x'1000'),
	typeof(NULL);Code language: SQL (Structured Query Language) (sql)

Una sola columna en SQLite puede almacenar tipos de datos mixtos. Vea el siguiente ejemplo.

Primero, crea una nueva tabla llamada test_datatypes para probar.

CREATE TABLE test_datatypes (
	id INTEGER PRIMARY KEY,
	val
);Code language: SQL (Structured Query Language) (sql)

En segundo lugar, inserte datos en test_datatypes mesa.

INSERT INTO test_datatypes (val)
VALUES
	(1),
	(2),
	(10.1),
	(20.5),
	('A'),
	('B'),
	(NULL),
	(x'0010'),
	(x'0011');Code language: SQL (Structured Query Language) (sql)

Tercero, use el typeof() función para obtener el tipo de datos de cada valor almacenado en el val columna.

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes;Code language: SQL (Structured Query Language) (sql)

Puede preguntar cómo SQLite ordena los datos en una columna con diferentes clases de almacenamiento como la columna val anterior.

Para resolver esto, SQLite proporciona el siguiente conjunto de reglas cuando se trata de ordenar:

  • La clase de almacenamiento NULL tiene el valor más bajo. Es más bajo que cualquier otro valor. Entre valores NULL, no hay orden.
  • Las siguientes clases de almacenamiento superiores son INTEGER y REAL. SQLite compara INTEGER y REAL numéricamente.
  • La siguiente clase de almacenamiento superior es TEXT. SQLite usa la intercalación de valores de TEXTO cuando compara los valores de TEXTO.
  • La clase de almacenamiento más alta es BLOB. SQLite usa la función C memcmp() para comparar valores BLOB.

Cuando usas el ORDER BY cláusula para ordenar los datos en una columna con diferentes clases de almacenamiento, SQLite realiza los siguientes pasos:

  • Primero, agrupe los valores según la clase de almacenamiento:NULL, INTEGER y REAL, TEXT y BLOB.
  • Segundo, ordene los valores en cada grupo.

La siguiente declaración ordena los datos mixtos en el val columna de test_datatypes tabla:

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes
ORDER BY val;Code language: SQL (Structured Query Language) (sql)

Tipografía de manifiesto de SQLite y afinidad de tipo

Otros conceptos importantes relacionados con los tipos de datos de SQLite son la tipificación de manifiestos y la afinidad de tipos:

  • La tipificación manifiesta significa que un tipo de datos es una propiedad de un valor almacenado en una columna, no la propiedad de la columna en la que se almacena el valor. SQLite usa el tipo de manifiesto para almacenar valores de cualquier tipo en una columna.
  • La afinidad de tipo de una columna es el tipo recomendado para los datos almacenados en esa columna. Tenga en cuenta que se recomienda el tipo de datos, no se requiere, por lo tanto, una columna puede almacenar cualquier tipo de datos.

En este tutorial, aprendió sobre los tipos de datos de SQLite y algunos conceptos importantes, incluidas las clases de almacenamiento, la tipificación de manifiestos y la afinidad de tipos.