SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Tipos de dados SQLite


Resumo :neste tutorial, você aprenderá sobre o sistema de tipos de dados SQLite e seus conceitos relacionados, como classes de armazenamento, tipagem de manifesto e afinidade de tipo.

Introdução aos tipos de dados SQLite


Se você vem de outros sistemas de banco de dados, como MySQL e PostgreSQL, percebe que eles usam digitação estática . Isso significa que quando você declara uma coluna com um tipo de dados específico, essa coluna pode armazenar apenas dados do tipo de dados declarado.

Diferente de outros sistemas de banco de dados, o SQLite usa sistema de tipo dinâmico . Em outras palavras, um valor armazenado em uma coluna determina seu tipo de dados, não o tipo de dados da coluna.

Além disso, você não precisa declarar um tipo de dados específico para uma coluna ao criar uma tabela. Caso você declare uma coluna com o tipo de dados inteiro, você pode armazenar qualquer tipo de dados como texto e BLOB, o SQLite não reclamará disso.

SQLite fornece cinco tipos de dados primitivos que são referidos como classes de armazenamento .

As classes de armazenamento descrevem os formatos que o SQLite usa para armazenar dados em disco. Uma classe de armazenamento é mais geral que um tipo de dados, por exemplo, INTEGER classe de armazenamento inclui 6 tipos diferentes de inteiros. Na maioria dos casos, você pode usar classes de armazenamento e tipos de dados de forma intercambiável.

A tabela a seguir ilustra 5 classes de armazenamento no SQLite:
Classe de armazenamento Significado
NULO Valores NULL significam informações ausentes ou desconhecidas.
INTEIRO Valores inteiros são números inteiros (positivos ou negativos). Um número inteiro pode ter tamanhos variáveis, como 1, 2,3, 4 ou 8 bytes.
REAL Valores reais são números reais com valores decimais que usam floats de 8 bytes.
TEXTO TEXT é usado para armazenar dados de caracteres. O comprimento máximo de TEXTO é ilimitado. SQLite suporta várias codificações de caracteres.
BLOB BLOB significa um objeto binário grande que pode armazenar qualquer tipo de dado. O tamanho máximo do BLOB é, teoricamente, ilimitado.

O SQLite determina o tipo de dados de um valor com base em seu tipo de dados de acordo com as seguintes regras:
  • Se um literal não tiver aspas e ponto decimal ou expoente, o SQLite atribuirá a classe de armazenamento INTEGER.
  • Se um literal estiver entre aspas simples ou duplas, o SQLite atribuirá a classe de armazenamento TEXT.
  • Se um literal não tem aspas nem ponto decimal nem expoente, o SQLite atribui uma classe de armazenamento REAL.
  • Se um literal for NULL sem aspas, ele atribuiu uma classe de armazenamento NULL.
  • Se um literal tiver X'ABCD' ou x 'abcd', a classe de armazenamento BLOB atribuída pelo SQLite.

SQLite não suporta classes de armazenamento de data e hora integradas. No entanto, você pode usar TEXT, INT ou REAL para armazenar valores de data e hora. Para obter informações detalhadas sobre como lidar com valores de data e hora, confira o tutorial de data e hora do SQLite.

SQLites fornece o typeof() função que permite verificar a classe de armazenamento de um valor com base em seu formato. Veja o seguinte exemplo:
SELECT
	typeof(100),
	typeof(10.0),
	typeof('100'),
	typeof(x'1000'),
	typeof(NULL);Code language: SQL (Structured Query Language) (sql)

Uma única coluna no SQLite pode armazenar tipos de dados mistos. Veja o exemplo a seguir.

Primeiro, crie uma nova tabela chamada test_datatypes para teste.
CREATE TABLE test_datatypes (
	id INTEGER PRIMARY KEY,
	val
);Code language: SQL (Structured Query Language) (sql)

Segundo, insira dados em test_datatypes tabela.
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)

Terceiro, use o typeof() função para obter o tipo de dados de cada valor armazenado no val coluna.
SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes;Code language: SQL (Structured Query Language) (sql)

Você pode perguntar como o SQLite classifica os dados em uma coluna com diferentes classes de armazenamento, como a coluna val acima.

Para resolver isso, o SQLite fornece o seguinte conjunto de regras quando se trata de classificação:
  • A classe de armazenamento NULL tem o valor mais baixo. É inferior a quaisquer outros valores. Entre valores NULL, não há ordem.
  • As próximas classes de armazenamento mais altas são INTEGER e REAL. SQLite compara INTEGER e REAL numericamente.
  • A próxima classe de armazenamento superior é TEXT. O SQLite usa o agrupamento de valores TEXT quando compara os valores TEXT.
  • A classe de armazenamento mais alta é o BLOB. SQLite usa a função C memcmp() para comparar valores BLOB.

Quando você usa o ORDER BY cláusula para classificar os dados em uma coluna com diferentes classes de armazenamento, o SQLite executa as seguintes etapas:
  • Primeiro, agrupe valores com base na classe de armazenamento:NULL, INTEGER e REAL, TEXT e BLOB.
  • Segundo, classifique os valores em cada grupo.

A instrução a seguir classifica os dados mistos no val coluna dos test_datatypes tabela:
SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes
ORDER BY val;Code language: SQL (Structured Query Language) (sql)

Tipo de manifesto SQLite e afinidade de tipo


Outros conceitos importantes relacionados aos tipos de dados SQLite são a tipagem de manifesto e afinidade de tipo:
  • A tipagem de manifesto significa que um tipo de dado é uma propriedade de um valor armazenado em uma coluna, não a propriedade da coluna na qual o valor está armazenado. O SQLite usa a tipagem de manifesto para armazenar valores de qualquer tipo em uma coluna.
  • A afinidade de tipo de uma coluna é o tipo recomendado para dados armazenados nessa coluna. Observe que o tipo de dados é recomendado, não obrigatório, portanto, uma coluna pode armazenar qualquer tipo de dados.

Neste tutorial, você aprendeu sobre os tipos de dados SQLite e alguns conceitos importantes, incluindo classes de armazenamento, tipagem de manifesto e afinidade de tipo.