SQLite Tipos de dados: Inteiro, Texto, Numérico, Real, Blob

⚡ Resumo Inteligente

SQLite Os tipos de dados funcionam de maneira diferente de outros bancos de dados porque SQLite usa tipos dinâmicosping, armazenando qualquer valor em qualquer coluna. As classes de armazenamento, a afinidade de tipo e os nomes de tipo declarados determinam, em conjunto, como cada valor é fisicamente salvo no disco.

  • 🧩 Tipo dinâmicoping: SQLite É tipado dinamicamente, portanto, o valor que você insere, e não a definição da coluna, decide como os dados são armazenados.
  • 🗄️ Classes de armazenamento: Cinco classes de armazenamento — NULL, INTEGER, REAL, TEXT e BLOB — descrevem como cada valor é armazenado em disco.
  • 🎯 Afinidade de tipo: Cada coluna recebe uma afinidade recomendada — TEXTO, NUMÉRICO, INTEIRO, REAL ou BLOB — a partir do nome do seu tipo declarado.
  • 🔢 Armazenamento de números: Qualquer tipo declarado que contenha INT torna-se INTEGER, enquanto REAL, DOUBLE e FLOAT armazenam números de ponto flutuante em oito bytes.
  • 📅 Datas e operadores booleanos: SQLite Não possui uma classe dedicada para DATA ou BOOLEAN e, em vez disso, armazena esses valores como TEXTO, REAL ou INTEIRO.
  • 🤖 Assistência de IA: Assistentes de IA de texto para SQL e GitHub Copilot geram SQLite Defina as colunas e escolha os tipos de dados em linguagem natural.

SQLite Tipos de dados

As seções abaixo explicam como SQLite Este livro aborda tipos de dados, começando com as cinco classes de armazenamento, depois a afinidade de tipos e suas regras de atribuição e, finalmente, exemplos práticos de armazenamento de inteiros, números reais, BLOBs, booleanos e datas.

Tipos de dados em SQLite diferem daqueles em outros sistemas de gerenciamento de banco de dados. SQLiteVocê pode declarar tipos de dados normalmente, mas ainda pode armazenar qualquer valor em qualquer tipo de dado.

SQLite é sem tipo. Não existem tipos de dados fixos; você pode armazenar qualquer tipo de dado que desejar em qualquer coluna. Isso é chamado de tipo dinâmico.ping.

Em tipos estáticos, assim como em outros sistemas de gerenciamento de banco de dados, se você declarar uma coluna com o tipo de dados inteiro, só poderá inserir valores do tipo inteiro. No entanto, em tipos dinâmicos, como em SQLiteO tipo da coluna é determinado pelo valor inserido e, em seguida, SQLite armazena esse valor dependendo do seu tipo.

SQLite Classes de Armazenamento

In SQLite Existem diferentes métodos de armazenamento dependendo do tipo de valor; esses diferentes métodos de armazenamento são chamados de classes de armazenamento. SQLite.

A seguir estão as classes de armazenamento disponíveis em SQLite:

  • NULL – esta classe de armazenamento é usada para armazenar qualquer valor NULL.
  • INTEGER – qualquer valor numérico é armazenado como um valor inteiro com sinal (pode conter valores inteiros positivos e negativos). Os valores INTEGER em SQLite são armazenados em 1, 2, 3, 4, 6 ou 8 bytes de armazenamento, dependendo do valor do número.
  • REAIS – Essa classe de armazenamento é usada para armazenar valores de ponto flutuante, que ocupam 8 bytes de espaço.
  • TEXTO – Armazena cadeias de texto. Também suporta diferentes codificações, como UTF-8, UTF-16BE ou UTF-16LE.
  • BLOB – Utilizado para armazenar arquivos grandes, como imagens ou arquivos de texto. O valor é armazenado como uma matriz de bytes, da mesma forma que o valor de entrada.

SQLite Tipo de afinidade

A afinidade de tipo é o tipo de dado recomendado para armazenamento em uma coluna. No entanto, você ainda pode armazenar qualquer tipo de dado que desejar; esses tipos são recomendados, não obrigatórios.

Esses tipos foram introduzidos em SQLite maximizar a compatibilidade entre SQLite e outro Sistema de gerenciamento de banco de dadoss.

Qualquer coluna declarada em um SQLite A um banco de dados é atribuída uma afinidade de tipo dependendo do tipo de dados declarado. Aqui está a lista de afinidades de tipo em SQLite:

  • TEXTO.
  • NUMÉRICO.
  • INTEIRO.
  • REAL.
  • BLOBO.

Aqui é como SQLite Determina a afinidade de uma coluna a partir do seu tipo de dados declarado:

  • A afinidade INTEGER será atribuída se o tipo declarado contiver o corda “INT”.
  • A afinidade TEXT é atribuída se a coluna contiver em seu tipo de dados uma das seguintes strings: “TEXT”, “CHAR” ou “CLOB”. Por exemplo, o tipo VARCHAR terá a afinidade TEXT atribuída.
  • A afinidade BLOB será atribuída se a coluna não tiver nenhum tipo especificado ou se o tipo de dados for um BLOB.
  • A afinidade REAL é atribuída se o tipo contiver uma das seguintes strings: “DOUB”, “REAL” ou “FLOAT”.
  • A afinidade NUMERIC é atribuída para qualquer outro tipo de dados.

Abaixo, encontra-se também uma tabela com alguns exemplos do mapa.ping entre SQLite tipos de dados e suas afinidades determinadas por estas regras:

Mapaping entre SQLite Tipos de dados declarados e suas respectivas afinidades de tipo, mostrando exemplos de INT, CHAR, TEXT, BLOB, REAL, FLOAT e NUMERIC.

Exemplos de armazenamento de tipos de dados em SQLite

Armazenando números com SQLite INTEGER

Se alguma coluna tiver um tipo de dados que contenha a palavra "INT", será atribuída a ela uma afinidade de tipo INTEGER. Ela será armazenada em uma classe de armazenamento INTEGER.

Todos os seguintes tipos de dados têm afinidade com o tipo INTEGER:

  • INT, INTEIRO, BIGINT.
  • INT2, INT4, INT8.
  • TINYINT, SMALLINT, MEDIUMINT.

Afinidade do tipo INTEGER em SQLite Pode armazenar qualquer número inteiro atribuído (positivo ou negativo) de 1 byte até um máximo de 8 bytes.

Armazenando números com SQLite REAIS

Números REAIS são números com precisão de ponto flutuante dupla. SQLite Armazena números reais como uma matriz de 8 bytes. Aqui está a lista de tipos de dados em SQLite que você pode usar para armazenar números REAIS:

  • REAL.
  • DOBRO.
  • DUPLA PRECISÃO.
  • FLUTUADOR.

Armazenando grandes dados com SQLite BLOB

Só existe uma maneira de armazenar arquivos grandes em um SQLite banco de dados, e isso utiliza o tipo de dados BLOB. Esse tipo de dados é usado para armazenar arquivos grandes, como imagens ou arquivos de qualquer tipo. O arquivo é convertido em uma matriz de bytes e então armazenado com o mesmo tamanho do arquivo de entrada.

Armazenar SQLite Booleanos

SQLite Não possui uma classe de armazenamento BOOLEAN separada. Em vez disso, os valores BOOLEAN são armazenados como INTEIROS, com 0 representando falso e 1 representando verdadeiro.

Armazenar SQLite datas e horas

Você pode declarar datas ou horários em SQLite usando um dos seguintes tipos de dados:

  • INFORMAÇÃO
  • DATETIME
  • TIMESTAMP
  • DE ESPERA

Observe que não existe uma classe de armazenamento DATE ou DATETIME separada em SQLiteEm vez disso, quaisquer valores declarados com um dos tipos de dados anteriores são armazenados em uma classe de armazenamento dependendo do formato de data do valor inserido, da seguinte forma:

  • TEXTO – se você inserir o valor da data no formato de uma string ISO8601 (“AAAA-MM-DD HH:MM:SS.SSS”).
  • REAIS – Se você inserir o valor da data como um número de dia juliano, o número de dias desde o meio-dia em Greenwich em 24 de novembro de 4714 a.C. O valor da data será então armazenado como REAL.
  • INTEGER - Como Unix Hora, o número de segundos desde 1970/01/01 00:00:00 UTC.

Perguntas Frequentes

Uma classe de armazenamento é como SQLite O tipo de dados armazena fisicamente um valor: NULL, INTEGER, REAL, TEXT ou BLOB, definido para cada valor em tempo de execução. A afinidade de tipo é a classe que uma coluna prefere, escolhida a partir do nome do tipo declarado. SQLite tenta se candidatar.

Não. SQLite ignora o número entre parênteses, portanto VARCHAR(50) e VARCHAR se comportam de maneira idêntica. Ambos recebem afinidade TEXT porque o nome do tipo contém CHAR, e SQLite Não impõe nenhum limite de comprimento, exceto o valor global SQLITE_MAX_LENGTH.

Use a função typeof() em uma consulta, como SELECT typeof(coluna) FROM tabela. Ela retorna a classe de armazenamento real do valor — null, integer, real, text ou blob — que pode ser diferente do tipo declarado da coluna devido à tipagem dinâmica.ping.

Tabelas STRICT, adicionadas em SQLite 3.37, desative a afinidade de tipo e rejeite qualquer valor que não corresponda ao tipo declarado de uma coluna. Somente INT, INTEGER, REAL, TEXT, BLOB e ANY são permitidos, conferindo rigidez ao tipo.ping encontrado em outros bancos de dados.

Armazene valores monetários como INTEGER na menor unidade possível, como centavos, para evitar erros de arredondamento comuns em valores de ponto flutuante REAL. Para valores variáveis ​​ou de altíssima precisão, o tipo TEXT preserva a sequência numérica exata. SQLite Não possui um tipo de moeda de ponto fixo dedicado.

A configuração SQLITE_MAX_LENGTH limita o tamanho de um valor TEXT ou BLOB e tem como padrão um bilhão de bytes. A implementação atual suporta até 2,147,483,647 bytes. Você pode reduzir o limite em tempo de execução com a interface sqlite3_limit() quando necessário.

Sim. Assistentes de IA de texto para SQL transformam uma descrição em inglês simples em instruções CREATE TABLE, escolhendo SQLite Classes de armazenamento e afinidades como INTEGER, TEXT e REAL. Fornecer tipos de coluna existentes melhora a precisão, e o SQL gerado deve ser revisado antes da execução.

Sim. Travas deslizantes portáteis Copiloto do GitHub sugere definições de coluna com SQLite tipos como INTEGER, TEXT, REAL e BLOB embutidos em editores como VS CodeEle lê o esquema e o código de migração circundantes, portanto, suas sugestões reutilizam os nomes reais de suas tabelas e colunas.

Resuma esta postagem com: