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, digitação 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 , notará que eles usam tipagem 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 utiliza um sistema de tipos dinâmicos . 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 chamados de 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, INTEGERa classe de armazenamento inclui 6 tipos diferentes de números 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 pontos flutuantes de 8 bytes.
TEXTO TEXT é usado para armazenar dados de caracteres. O comprimento máximo do TEXT é ilimitado. SQLite oferece suporte a várias codificações de caracteres.
BLOBO BLOB significa um objeto binário grande que pode armazenar qualquer tipo de dados. O tamanho máximo do BLOB é, teoricamente, ilimitado.

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 atribui a classe de armazenamento INTEGER.
  • Se um literal estiver entre aspas simples ou duplas, o SQLite atribui a classe de armazenamento TEXT.
  • Se um literal não tiver aspas, nem ponto decimal, nem expoente, o SQLite atribui a 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’, o SQLite atribuiu a classe de armazenamento BLOB.

SQLite não oferece suporte a classes integradas de armazenamento de data e hora. 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 a typeof()função que permite verificar a classe de armazenamento de um valor com base em seu formato. Veja o exemplo a seguir:

SELECT
	typeof(100),
	typeof(10.0),
	typeof('100'),
	typeof(x'1000'),
	typeof(NULL);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Tipos de dados SQLite - função typeof

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

Primeiro, crie uma nova tabela chamada test_datatypespara teste.

CREATE TABLE test_datatypes (
	id INTEGER PRIMARY KEY,
	val
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira dados na test_datatypestabela.

INSERT INTO test_datatypes (val)
VALUES
	(1),
	(2),
	(10.1),
	(20.5),
	('A'),
	('B'),
	(NULL),
	(x'0010'),
	(x'0011');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, use a typeof()função para obter o tipo de dados de cada valor armazenado na valcoluna.

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Tipos de dados SQLite – tipos de dados mistos em uma coluna

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 superiores são INTEGER e REAL. SQLite compara INTEGER e REAL numericamente.
  • A próxima classe de armazenamento superior é TEXT. 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.

Ao usar a 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 na valcoluna da test_datatypestabela:

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes
ORDER BY val;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Tipos de dados SQLite e cláusula ORDER BY

Digitação de manifesto SQLite e afinidade de tipo

Outros conceitos importantes relacionados aos tipos de dados SQLite são tipagem de manifesto e afinidade de tipo:

  • A digitação de manifesto significa que um tipo de dados é uma propriedade de um valor armazenado em uma coluna, não a propriedade da coluna na qual o valor está armazenado. SQLite usa digitação 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, digitação de manifesto e afinidade de tipo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *