SQLite Datatyper: Heltal, Tekst, Numerisk, Reel, Blob

โšก Smart opsummering

SQLite Datatyper fungerer anderledes end andre databaser fordi SQLite bruger dynamisk typing, lagring af en hvilken som helst vรฆrdi i en hvilken som helst kolonne. Lagringsklasser, typetilhรธrighed og deklarerede typenavne bestemmer tilsammen, hvordan hver vรฆrdi fysisk gemmes pรฅ disken.

  • ๐Ÿงฉ Dynamisk Typing: SQLite er dynamisk indtastet, sรฅ den vรฆrdi, du indsรฆtter, ikke kolonnedefinitionen, bestemmer, hvordan dataene gemmes.
  • ๐Ÿ—„๏ธ Opbevaringsklasser: Fem lagringsklasser โ€” NULL, INTEGER, REAL, TEXT og BLOB โ€” beskriver, hvordan hver vรฆrdi opbevares pรฅ disken.
  • ๐ŸŽฏ Typeaffinitet: Hver kolonne modtager en anbefalet affinitet โ€” TEKST, NUMERISK, INTEGER, REAL eller BLOB โ€” fra dens deklarerede typenavn.
  • ๐Ÿ”ข Nummerlagring: Enhver deklareret type, der indeholder INT, bliver INTEGER, mens REAL, DOUBLE og FLOAT indeholder flydende tal i otte bytes.
  • ๐Ÿ“… Datoer og boolske vรฆrdier: SQLite har ingen dedikeret DATE- eller BOOLEAN-klasse og gemmer i stedet disse vรฆrdier som TEXT, REAL eller INTEGER.
  • ๐Ÿค– AI Assistance: AI tekst-til-SQL-assistenter og GitHub Copilot genererer SQLite kolonnedefinitioner og vรฆlg datatyper fra almindeligt engelsk.

SQLite Datatyper

Afsnittene nedenfor forklarer hvordan SQLite hรฅndterer datatyper, startende med de fem lagringsklasser, derefter typeaffinitet og dens tildelingsregler, og endelig bearbejdede eksempler pรฅ lagring af heltal, reelle tal, BLOB'er, boolske tal og datoer.

Datatyper ind SQLite adskiller sig fra dem i andre databasestyringssystemer. SQLite, kan du deklarere datatyper normalt, men du kan stadig gemme enhver vรฆrdi i enhver datatype.

SQLite er typelรธs. Der er ingen faste datatyper; du kan gemme enhver type data, du รธnsker, i enhver kolonne. Dette kaldes dynamisk typing.

I statiske typer, som i andre databasestyringssystemer, kan du kun indsรฆtte vรฆrdier af datatypen heltal, hvis du deklarerer en kolonne med datatypen heltal. I dynamiske typer, som i SQLite, kolonnetypen bestemmes af den indsatte vรฆrdi, og derefter SQLite gemmer denne vรฆrdi afhรฆngigt af dens type.

SQLite Opbevaringsklasser

In SQLite Der findes forskellige lagringsmetoder afhรฆngigt af vรฆrditypen; disse forskellige lagringsmetoder kaldes lagringsklasser i SQLite.

Fรธlgende er de opbevaringsklasser, der er tilgรฆngelige i SQLite:

  • NULL โ€“ denne lagerklasse bruges til at gemme enhver NULL-vรฆrdi.
  • HELTAL โ€“ enhver numerisk vรฆrdi gemmes som et heltal med fortegn (den kan indeholde bรฅde positive og negative heltal). HELTALSvรฆrdierne i SQLite gemmes i enten 1, 2, 3, 4, 6 eller 8 bytes lager afhรฆngigt af vรฆrdien af โ€‹โ€‹tallet.
  • ร†GTE โ€“ denne lagringsklasse bruges til at gemme flydende kommavรฆrdier, og de gemmes i 8 bytes lagerplads.
  • TEKST โ€“ gemmer tekststrenge. Den understรธtter ogsรฅ forskellige kodninger som UTF-8, UTF-16BE eller UTF-16LE.
  • Blob โ€“ bruges til at gemme store filer, sรฅsom billeder eller tekstfiler. Vรฆrdien gemmes som et byte-array, det samme som inputvรฆrdien.

SQLite Affinitetstype

Typeaffinitet er den anbefalede type data, der gemmes i en kolonne. Du kan dog stadig gemme enhver type data, som du รธnsker; disse typer anbefales, ikke pรฅkrรฆvede.

Disse typer blev introduceret i SQLite for at maksimere kompatibiliteten mellem SQLite og andre databasestyringssystems.

Enhver kolonne erklรฆret i en SQLite Databasen tildeles en typeaffinitet afhรฆngigt af dens deklarerede datatype. Her er listen over typeaffiniteter i SQLite:

  • TEKST.
  • NUMERISK.
  • HELTAL.
  • ร†GTE.
  • BLOB.

Her er, hvordan SQLite bestemmer en kolonnes affinitet ud fra dens deklarerede datatype:

  • HELTAL affinitet tildeles, hvis den erklรฆrede type indeholder streng "INT".
  • TEXT-affinitet tildeles, hvis kolonnen indeholder en af โ€‹โ€‹fรธlgende strenge i sin datatype: "TEXT", "CHAR" eller "CLOB". For eksempel vil typen VARCHAR blive tildelt TEXT-affiniteten.
  • BLOB-affinitet tildeles, hvis kolonnen ikke har nogen specificeret type, eller datatypen er en BLOB.
  • REAL-affinitet tildeles, hvis typen indeholder en af โ€‹โ€‹fรธlgende strenge: "DOUB", "REAL" eller "FLOAT".
  • NUMERISK affinitet tildeles for enhver anden datatype.

Der er ogsรฅ en tabel nedenfor, der viser nogle eksempler pรฅ kortetping mellem SQLite datatyper og deres tilhรธrsforhold bestemt af disse regler:

Kortping mellem SQLite Deklarerede datatyper og deres tildelte typeaffiniteter, med eksempler pรฅ INT, CHAR, TEXT, BLOB, REAL, FLOAT og NUMERIC

Eksempler pรฅ lagring af datatyper i SQLite

Lagring af numre med SQLite HELTAL

Hvis en kolonne har en datatype, der indeholder ordet "INT", vil den blive tildelt en INTEGER-typeaffinitet. Den vil blive gemt i en INTEGER-lagringsklasse.

Alle fรธlgende datatyper tildeles en INTEGER-typeaffinitet:

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

INTEGER type affinitet i SQLite kan indeholde ethvert tildelt heltal (positivt eller negativt) fra 1 byte op til maksimalt 8 bytes.

Lagring af numre med SQLite ร†GTE

RELE tal er tal med dobbelt flydende kommaprรฆcision. SQLite gemmer reelle tal som et 8-byte array. Her er listen over datatyper i SQLite som du kan bruge til at gemme RIGTIGE numre:

  • ร†GTE.
  • DOBBELT.
  • DOBBELT PRร†CISION.
  • FLYDE.

Lagring af store data med SQLite Blob

Der er kun รฉn mรฅde at gemme store filer pรฅ SQLite database, og det bruger BLOB-datatypen. Denne datatype bruges til at gemme store filer som billeder eller filer af enhver type. Filen konverteres til et byte-array og gemmes derefter i samme stรธrrelse som inputfilen.

Lagring SQLite Booleans

SQLite har ikke en separat BOOLEAN-lagringsklasse. I stedet gemmes BOOLEAN-vรฆrdier som HELTAL, hvor 0 reprรฆsenterer falsk og 1 reprรฆsenterer sand.

Lagring SQLite datoer og tidspunkter

Du kan angive datoer eller dato-tidspunkter i SQLite ved hjรฆlp af en af โ€‹โ€‹fรธlgende datatyper:

  • INFORMATION
  • DATO TID
  • TIDSSTEMPEL
  • TIME

Bemรฆrk, at der ikke er nogen separat DATE- eller DATETIME-lagringsklasse i SQLiteI stedet gemmes alle vรฆrdier, der er deklareret med en af โ€‹โ€‹de foregรฅende datatyper, i en lagringsklasse afhรฆngigt af datoformatet for den indsatte vรฆrdi, som fรธlger:

  • TEKST โ€“ hvis du indsรฆtter datovรฆrdien i formatet af en ISO8601-streng (โ€œร…ร…ร…ร…-MM-DD TT:MM:SSS).
  • ร†GTE โ€“ hvis du indsรฆtter datovรฆrdien som et juliansk dagtal, er det antallet af dage siden middag i Greenwich den 24. november 4714 f.Kr. Datovรฆrdien gemmes derefter som REAL.
  • HELTAL - som Unix Tid, antallet af sekunder siden 1970-01-01 00:00:00 UTC.

Ofte Stillede Spรธrgsmรฅl

En opbevaringsklasse er hvordan SQLite lagrer fysisk en vรฆrdi: NULL, INTEGER, REAL, TEXT eller BLOB, bestemt pr. vรฆrdi under kรธrsel. Typeaffinitet er den klasse, en kolonne foretrรฆkker, valgt ud fra dens deklarerede typenavn, som SQLite forsรธger at anvende.

Nej. SQLite ignorerer tallet i parentes, sรฅ VARCHAR(50) og VARCHAR opfรธrer sig identisk. Begge modtager TEXT-affinitet, fordi typenavnet indeholder CHAR, og SQLite pรฅlรฆgger ingen lรฆngdegrรฆnse undtagen den globale SQLITE_MAX_LENGTH-vรฆrdi.

Brug funktionen typeof() i en forespรธrgsel, f.eks. SELECT typeof(kolonne) FROM tabel. Den returnerer vรฆrdiens reelle lagerklasse โ€” null, integer, real, text eller blob โ€” som kan afvige fra kolonnens deklarerede type pรฅ grund af dynamisk ty.ping.

STRICT-tabeller, tilfรธjet i SQLite 3.37, slรฅ typeaffinitet fra og afvis enhver vรฆrdi, der ikke matcher en kolonnes deklarerede type. Kun INT, INTEGER, REAL, TEXT, BLOB og ANY er tilladt, hvilket giver den rigide typing fundet i andre databaser.

Gem penge som et HELTAL i den mindste enhed, f.eks. cent, for at undgรฅ afrundingsfejl i RIGTIGE flydende kommavรฆrdier. For variabel eller meget hรธj prรฆcision bevarer TEKST den nรธjagtige talstreng. SQLite har ingen dedikeret pengetype med fast punkt.

Indstillingen SQLITE_MAX_LENGTH begrรฆnser en TEXT- eller BLOB-vรฆrdi og er som standard sat til en milliard bytes. Den nuvรฆrende implementering understรธtter op til 2,147,483,647 bytes. Du kan sรฆnke grรฆnsen under kรธrsel med sqlite3_limit()-grรฆnsefladen, nรฅr det er nรธdvendigt.

Ja. AI tekst-til-SQL-assistenter omdanner en almindelig engelsk beskrivelse til CREATE TABLE-sรฆtninger ved at vรฆlge SQLite Lagringsklasser og affiniteter sรฅsom INTEGER, TEXT og REAL. Angivelse af eksisterende kolonnetyper forbedrer nรธjagtigheden, og genereret SQL bรธr gennemgรฅs fรธr kรธrsel.

Ja. GitHub Copilot foreslรฅr kolonnedefinitioner med SQLite typer som INTEGER, TEXT, REAL og BLOB inline i editorer som f.eks. VS CodeDen lรฆser den omgivende skema- og migreringskode, sรฅ dens fuldfรธrelser genbruger dine rigtige tabel- og kolonnenavne.

Opsummer dette indlรฆg med: