sql >> Databasteknik >  >> RDS >> SQLite

SQLite datatyper

Sammanfattning :i den här handledningen kommer du att lära dig om SQLite-datatypsystem och dess relaterade begrepp som lagringsklasser, manifestskrivning och typaffinitet.

Introduktion till SQLite-datatyper

Om du kommer från andra databassystem som MySQL och PostgreSQL märker du att de använder statisk typning . Det betyder att när du deklarerar en kolumn med en specifik datatyp, kan den kolumnen endast lagra data av den deklarerade datatypen.

Till skillnad från andra databassystem använder SQLite dynamisk typsystem . Med andra ord, ett värde som lagras i en kolumn bestämmer dess datatyp, inte kolumnens datatyp.

Dessutom behöver du inte deklarera en specifik datatyp för en kolumn när du skapar en tabell. Om du deklarerar en kolumn med heltalsdatatypen kan du lagra alla typer av datatyper som text och BLOB, SQLite kommer inte att klaga på detta.

SQLite tillhandahåller fem primitiva datatyper som kallas lagringsklasser.

Lagringsklasser beskriver de format som SQLite använder för att lagra data på disk. En lagringsklass är mer allmän än en datatyp, t.ex. INTEGER lagringsklassen innehåller 6 olika typer av heltal. I de flesta fall kan du använda lagringsklasser och datatyper omväxlande.

Följande tabell illustrerar 5 lagringsklasser i SQLite:

Lagringsklass Betydning
NULL NULL-värden betyder saknad information eller okänt.
INTEGER Heltalsvärden är heltal (antingen positiva eller negativa). Ett heltal kan ha olika storlekar som 1, 2, 3, 4 eller 8 byte.
VERKLIG Reella värden är reella tal med decimalvärden som använder 8-byte flytningar.
TEXT TEXT används för att lagra teckendata. Den maximala längden på TEXT är obegränsad. SQLite stöder olika teckenkodningar.
BLOB BLOB står för ett binärt stort objekt som kan lagra vilken typ av data som helst. Den maximala storleken på BLOB är teoretiskt sett obegränsad.

SQLite bestämmer datatypen för ett värde baserat på dess datatyp enligt följande regler:

  • Om en bokstavlig bokstav inte har några citattecken och decimalkomma eller exponent, tilldelar SQLite lagringsklassen INTEGER.
  • Om en bokstavlig bokstav omges av enkla eller dubbla citattecken, tilldelar SQLite lagringsklassen TEXT.
  • Om en bokstavlig bokstav inte har citattecken, decimalkomma eller exponent, tilldelar SQLite REAL lagringsklass.
  • Om en literal är NULL utan citattecken tilldelas den NULL-lagringsklassen.
  • Om en literal har X'ABCD' eller x 'abcd', tilldelade SQLite BLOB-lagringsklassen.

SQLite stöder inte inbyggda datum- och tidslagringsklasser. Du kan dock använda TEXT, INT eller REAL för att lagra datum- och tidsvärden. För detaljerad information om hur du hanterar datum- och tidsvärden, kolla in SQLites självstudie för datum och tid.

SQLites tillhandahåller typeof() funktion som låter dig kontrollera lagringsklassen för ett värde baserat på dess format. Se följande exempel:

SELECT
	typeof(100),
	typeof(10.0),
	typeof('100'),
	typeof(x'1000'),
	typeof(NULL);Code language: SQL (Structured Query Language) (sql)

En enda kolumn i SQLite kan lagra blandade datatyper. Se följande exempel.

Skapa först en ny tabell med namnet test_datatypes för testning.

CREATE TABLE test_datatypes (
	id INTEGER PRIMARY KEY,
	val
);Code language: SQL (Structured Query Language) (sql)

För det andra, infoga data i test_datatypes bord.

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)

För det tredje, använd typeof() funktion för att få datatypen för varje värde lagrat i val kolumn.

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes;Code language: SQL (Structured Query Language) (sql)

Du kan fråga hur SQLite sorterar data i en kolumn med olika lagringsklasser som valkolumnen ovan.

För att lösa detta tillhandahåller SQLite följande uppsättning regler när det gäller sortering:

  • NULL-lagringsklassen har det lägsta värdet. Det är lägre än alla andra värden. Mellan NULL-värden finns det ingen ordning.
  • Nästa högre lagringsklasser är INTEGER och REAL. SQLite jämför INTEGER och REAL numeriskt.
  • Nästa högre lagringsklass är TEXT. SQLite använder sammanställningen av TEXT-värden när den jämför TEXT-värdena.
  • Den högsta lagringsklassen är BLOB. SQLite använder C-funktionen memcmp() för att jämföra BLOB-värden.

När du använder ORDER BY för att sortera data i en kolumn med olika lagringsklasser, utför SQLite följande steg:

  • Först, gruppvärden baserat på lagringsklass:NULL, INTEGER och REAL, TEXT och BLOB.
  • Sortera för det andra värdena i varje grupp.

Följande sats sorterar den blandade datan i val kolumnen för test_datatypes tabell:

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes
ORDER BY val;Code language: SQL (Structured Query Language) (sql)

SQLite-manifestskrivning och typaffinitet

Andra viktiga begrepp relaterade till SQLite-datatyper är manifesttypning och typaffinitet:

  • Manifestskrivning betyder att en datatyp är en egenskap för ett värde som lagras i en kolumn, inte egenskapen för den kolumn där värdet lagras. SQLite använder manifesttypning för att lagra värden av vilken typ som helst i en kolumn.
  • Typaffinitet för en kolumn är den rekommenderade typen för data som lagras i den kolumnen. Observera att datatypen rekommenderas, inte obligatorisk, därför kan en kolumn lagra vilken typ av data som helst.

I den här handledningen har du lärt dig om SQLite-datatyper och några viktiga begrepp, inklusive lagringsklasser, manifestskrivning och typaffinitet.


  1. Hur konfigurerar jag HikariCP för postgresql?

  2. Jag förstår inte Collation? (Mysql, RDBMS, teckenuppsättningar)

  3. T-SQL få antal arbetsdagar mellan 2 datum

  4. Oracle till PostgreSQL:Reasons to Migrate