SQLite Datatyper: Heltall, Tekst, Numerisk, Reell, Blob

โšก Smart oppsummering

SQLite Datatyper fungerer annerledes enn andre databaser fordi SQLite bruker dynamisk typing, og lagrer en hvilken som helst verdi i en hvilken som helst kolonne. Lagringsklasser, typetilhรธrighet og deklarerte typenavn bestemmer sammen hvordan hver verdi fysisk lagres pรฅ disken.

  • ๐Ÿงฉ Dynamisk Typing: SQLite er dynamisk skrevet, sรฅ verdien du setter inn, ikke kolonnedefinisjonen, bestemmer hvordan dataene lagres.
  • ๐Ÿ—„๏ธ Lagringsklasser: Fem lagringsklasser โ€“ NULL, INTEGER, REAL, TEXT og BLOB โ€“ beskriver hvordan hver verdi lagres pรฅ disken.
  • ๐ŸŽฏ Typeaffinitet: Hver kolonne mottar en anbefalt affinitet โ€“ TEKST, NUMERISK, HELTALL, REAL eller BLOB โ€“ fra det deklarerte typenavnet.
  • ๐Ÿ”ข Nummerlagring: Enhver deklarert type som inneholder INT blir INTEGER, mens REAL, DOUBLE og FLOAT holder flyttall i รฅtte byte.
  • ๐Ÿ“… Datoer og boolske verdier: SQLite har ingen dedikert DATE- eller BOOLEAN-klasse og lagrer disse verdiene som TEXT, REAL eller INTEGER i stedet.
  • ๐Ÿค– AI-hjelp: AI tekst-til-SQL-assistenter og GitHub Copilot genererer SQLite kolonnedefinisjoner og velg datatyper fra vanlig engelsk.

SQLite Datatyper

Avsnittene nedenfor forklarer hvordan SQLite hรฅndterer datatyper, startende med de fem lagringsklassene, deretter typeaffinitet og tildelingsreglene, og til slutt utarbeidede eksempler pรฅ lagring av heltall, reelle tall, BLOB-er, boolske tall og datoer.

Datatyper inn SQLite skiller seg fra de i andre databasesystemer. SQLite, kan du deklarere datatyper normalt, men du kan fortsatt lagre hvilken som helst verdi i hvilken som helst datatype.

SQLite er typelรธs. Det finnes ingen faste datatyper; du kan lagre hvilken som helst type data du รธnsker i en hvilken som helst kolonne. Dette kalles dynamisk typing.

I statiske typer, som i andre databasebehandlingssystemer, kan du bare sette inn verdier av datatypen heltall hvis du deklarerer en kolonne med datatypen heltall. I dynamiske typer, som i SQLite, kolonnetypen bestemmes av verdien som settes inn, og deretter SQLite lagrer denne verdien avhengig av typen.

SQLite Lagringsklasser

In SQLite Det finnes forskjellige lagringsmetoder avhengig av verditypen; disse forskjellige lagringsmetodene kalles lagringsklasser i SQLite.

Fรธlgende er lagringsklassene som er tilgjengelige i SQLite:

  • NULL โ€“ denne lagringsklassen brukes til รฅ lagre enhver NULL-verdi.
  • INTEGER โ€“ enhver numerisk verdi lagres som et heltall med fortegn (den kan inneholde bรฅde positive og negative heltallsverdier). HELTALLSverdiene i SQLite lagres i enten 1, 2, 3, 4, 6 eller 8 byte lagringsplass, avhengig av verdien pรฅ tallet.
  • EKTE โ€“ denne lagringsklassen brukes til รฅ lagre flyttallverdiene, og de lagres i 8 byte med lagringsplass.
  • TEKST โ€“ lagrer tekststrenger. Den stรธtter ogsรฅ forskjellige kodinger som UTF-8, UTF-16BE eller UTF-16LE.
  • BLOB โ€“ brukes til รฅ lagre store filer, som bilder eller tekstfiler. Verdien lagres som en byte-matrise, det samme som inngangsverdien.

SQLite Tilhรธrighetstype

Typetilhรธrighet er den anbefalte datatypen som lagres i en kolonne. Du kan imidlertid fortsatt lagre alle datatyper du รธnsker; disse typene anbefales, ikke pรฅkrevd.

Disse typene ble introdusert i SQLite for รฅ maksimere kompatibiliteten mellom SQLite og andre databasesystems.

Enhver kolonne erklรฆrt i en SQLite databasen tildeles en typetilhรธrighet avhengig av den deklarerte datatypen. Her er listen over typetilhรธrigheter i SQLite:

  • TEKST.
  • NUMERISK.
  • HELTAL.
  • EKTE.
  • BLOB.

Her er hvordan SQLite bestemmer affiniteten til en kolonne fra den deklarerte datatypen:

  • INTEGER-tilhรธrighet tildeles hvis den deklarerte typen inneholder string ยซINTยป.
  • TEXT-affinitet tildeles hvis kolonnen inneholder en av fรธlgende strenger i datatypen: ยซTEXTยป, ยซCHARยป eller ยซCLOBยป. For eksempel vil typen VARCHAR tildeles TEXT-affiniteten.
  • BLOB-tilhรธrighet tildeles hvis kolonnen ikke har noen type spesifisert eller datatypen er en BLOB.
  • REAL-tilhรธrighet tildeles hvis typen inneholder en av fรธlgende strenger: ยซDOUBยป, ยซREALยป eller ยซFLOATยป.
  • NUMERISK tilhรธrighet er tilordnet for alle andre datatyper.

Det finnes ogsรฅ en tabell nedenfor som viser noen eksempler pรฅ kartetping mellom SQLite datatyper og deres tilhรธrighet bestemt av disse reglene:

kartping mellom SQLite deklarerte datatyper og deres tildelte typeaffiniteter, med eksempler pรฅ INT, CHAR, TEXT, BLOB, REAL, FLOAT og NUMERIC

Eksempler pรฅ lagring av datatyper i SQLite

Lagre tall med SQLite INTEGER

Hvis en kolonne har en datatype som inneholder ordet ยซINTยป, vil den bli tilordnet en INTEGER-typetilhรธrighet. Den vil bli lagret i en INTEGER-lagringsklasse.

Alle fรธlgende datatyper er tilordnet en INTEGER-typeaffinitet:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • LITENINT, LITENINT, MEDIUMINT.

INTEGER type affinitet i SQLite kan holde et hvilket som helst tildelt heltall (positivt eller negativt) fra 1 byte opptil maksimalt 8 byte.

Lagre tall med SQLite EKTE

REELLE tall er tall med dobbel flyttallspresisjon. SQLite lagrer reelle tall som en 8-byte-matrise. Her er listen over datatyper i SQLite som du kan bruke til รฅ lagre EKTE tall:

  • EKTE.
  • DOBBELT.
  • DOBBEL PRESISJON.
  • FLYTE.

Lagre store data med SQLite BLOB

Det finnes bare รฉn mรฅte รฅ lagre store filer pรฅ SQLite database, og det bruker BLOB-datatypen. Denne datatypen brukes til รฅ lagre store filer som bilder eller filer av alle typer. Filen konverteres til en byte-array og lagres deretter i samme stรธrrelse som inndatafilen.

Lagring SQLite booleans

SQLite har ikke en separat BOOLESK lagringsklasse. I stedet lagres BOOLESK verdier som HELTAL, der 0 representerer usann og 1 representerer sann.

Lagring SQLite datoer og klokkeslett

Du kan deklarere datoer eller dato-klokkeslett i SQLite ved รฅ bruke en av fรธlgende datatyper:

  • INFORMASJON
  • DATO TID
  • TIMESTAMP
  • TIME

Merk at det ikke finnes noen separat DATE- eller DATETIME-lagringsklasse i SQLiteI stedet lagres alle verdier som er deklarert med en av de foregรฅende datatypene i en lagringsklasse avhengig av datoformatet til den innsatte verdien, som fรธlger:

  • TEKST โ€“ hvis du setter inn datoverdien i formatet til en ISO8601-streng (ยซร…ร…ร…ร…-MM-DD TT:MM:SSSยป).
  • EKTE โ€“ hvis du setter inn datoverdien som et juliansk dagtall, er det antall dager siden klokken 12 i Greenwich den 24. november 4714 f.Kr. Datoverdien lagres da som REELL.
  • INTEGER โ€“ som Unix Tid, antall sekunder siden 1970-01-01 00:00:00 UTC.

Spรธrsmรฅl og svar

En lagringsklasse er hvordan SQLite lagrer fysisk en verdi: NULL, INTEGER, REAL, TEXT eller BLOB, bestemt per verdi under kjรธring. Typeaffinitet er klassen en kolonne foretrekker, valgt fra det deklarerte typenavnet, som SQLite prรธver รฅ sรธke.

Nei. SQLite ignorerer tallet i parentes, slik at VARCHAR(50) og VARCHAR oppfรธrer seg identisk. Begge fรฅr TEXT-tilhรธrighet fordi typenavnet inneholder CHAR, og SQLite pรฅlegger ingen lengdegrense bortsett fra den globale SQLITE_MAX_LENGTH-verdien.

Bruk typeof()-funksjonen i en spรธrring, for eksempel SELECT typeof(column) FROM table. Den returnerer verdiens reelle lagringsklasse โ€“ null, integer, real, text eller blob โ€“ som kan avvike fra kolonnens deklarerte type pรฅ grunn av dynamisk ty.ping.

STRICT-tabeller, lagt til i SQLite 3.37, slรฅ av typetilhรธrighet og avvis alle verdier som ikke samsvarer med en kolonnes deklarerte type. Bare INT, INTEGER, REAL, TEXT, BLOB og ANY er tillatt, noe som gir den rigide typenping funnet i andre databaser.

Lagre penger som et HELTAL i den minste enheten, for eksempel cent, for รฅ unngรฅ avrundingsfeilene i REELLE flyttallverdier. For variabel eller svรฆrt hรธy presisjon bevarer TEKST den nรธyaktige tallstrengen. SQLite har ingen dedikert pengetype med fast punkt.

Innstillingen SQLITE_MAX_LENGTH begrenser en TEXT- eller BLOB-verdi og har som standard รฉn milliard byte. Den nรฅvรฆrende implementeringen stรธtter opptil 2 147 483 647 byte. Du kan senke grensen under kjรธring med sqlite3_limit()-grensesnittet nรฅr det er nรธdvendig.

Ja. AI-tekst-til-SQL-assistenter gjรธr en beskrivelse pรฅ vanlig engelsk om til CREATE TABLE-setninger, og velger SQLite lagringsklasser og affiniteter som INTEGER, TEXT og REAL. ร… angi eksisterende kolonnetyper forbedrer nรธyaktigheten, og generert SQL bรธr gjennomgรฅs fรธr kjรธring.

Ja. GitHub Copilot foreslรฅr kolonnedefinisjoner med SQLite typer som INTEGER, TEKST, REAL og BLOB innebygd i editorer som VS CodeDen leser omkringliggende skjema- og migreringskode, slik at fullfรธringene gjenbruker de virkelige tabell- og kolonnenavnene dine.

Oppsummer dette innlegget med: