sql >> Databáze >  >> RDS >> SQLite

Typy dat SQLite

Shrnutí :v tomto tutoriálu se dozvíte o systému datových typů SQLite a jeho souvisejících konceptech, jako jsou třídy úložiště, typování manifestu a typová afinita.

Úvod do datových typů SQLite

Pokud pocházíte z jiných databázových systémů, jako je MySQL a PostgreSQL, všimnete si, že používají statické psaní . To znamená, že když deklarujete sloupec se specifickým datovým typem, tento sloupec může ukládat pouze data deklarovaného datového typu.

Na rozdíl od jiných databázových systémů používá SQLite systém dynamického typu . Jinými slovy, hodnota uložená ve sloupci určuje jeho datový typ, nikoli datový typ sloupce.

Navíc při vytváření tabulky nemusíte deklarovat konkrétní datový typ pro sloupec. V případě, že deklarujete sloupec s datovým typem integer, můžete ukládat jakýkoli druh datových typů, jako je text a BLOB, SQLite si na to nebude stěžovat.

SQLite poskytuje pět primitivních datových typů, které se označují jako třídy úložiště.

Třídy úložiště popisují formáty, které SQLite používá k ukládání dat na disk. Třída úložiště je obecnější než datový typ, např. INTEGER třída úložiště obsahuje 6 různých typů celých čísel. Ve většině případů můžete třídy úložiště a datové typy používat zaměnitelně.

Následující tabulka ilustruje 5 tříd úložiště v SQLite:

Třída úložiště Význam
NULL Hodnoty NULL znamenají chybějící informace nebo neznámé.
INTEGER Celočíselné hodnoty jsou celá čísla (buď kladná nebo záporná). Celé číslo může mít proměnnou velikost, například 1, 2, 3, 4 nebo 8 bajtů.
SKUTEČNÉ Skutečné hodnoty jsou reálná čísla s desetinnými hodnotami, které používají 8bajtové plovoucí znaky.
TEXT TEXT se používá k ukládání znakových dat. Maximální délka TEXTu je neomezená. SQLite podporuje různá kódování znaků.
BLOB BLOB znamená binární velký objekt, který může ukládat jakýkoli druh dat. Maximální velikost BLOB je teoreticky neomezená.

SQLite určuje datový typ hodnoty na základě jejího datového typu podle následujících pravidel:

  • Pokud literál neobsahuje žádné uvozovky a desetinnou čárku nebo exponent, SQLite přiřadí třídu úložiště INTEGER.
  • Pokud je literál uzavřen do jednoduchých nebo dvojitých uvozovek, SQLite přiřadí třídu úložiště TEXT.
  • Pokud literál nemá uvozovky, desetinnou čárku ani exponent, SQLite přiřadí třídu úložiště REAL.
  • Pokud má literál hodnotu NULL bez uvozovek, je přiřazena třída úložiště NULL.
  • Pokud má literál X’ABCD’ nebo x ‘abcd’, SQLite mu přiřadí třídu úložiště BLOB.

SQLite nepodporuje vestavěné třídy ukládání data a času. K uložení hodnot data a času však můžete použít TEXT, INT nebo REAL. Podrobné informace o tom, jak zacházet s hodnotami data a času, najdete v kurzu data a času SQLite.

SQLites poskytuje typeof() funkce, která vám umožňuje zkontrolovat třídu úložiště hodnoty na základě jejího formátu. Viz následující příklad:

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

Jeden sloupec v SQLite může ukládat smíšené datové typy. Viz následující příklad.

Nejprve vytvořte novou tabulku s názvem test_datatypes pro testování.

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

Za druhé vložte data do test_datatypes tabulka.

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)

Za třetí, použijte typeof() funkce k získání datového typu každé hodnoty uložené v val sloupec.

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

Můžete se zeptat, jak SQLite třídí data ve sloupci s různými třídami úložiště, jako je sloupec val výše.

K vyřešení tohoto problému poskytuje SQLite následující sadu pravidel, pokud jde o řazení:

  • Třída úložiště NULL má nejnižší hodnotu. Je nižší než jakékoli jiné hodnoty. Mezi hodnotami NULL není žádné pořadí.
  • Další vyšší třídy úložiště jsou INTEGER a REAL. SQLite porovnává INTEGER a REAL numericky.
  • Další vyšší třídou úložiště je TEXT. SQLite používá řazení hodnot TEXT, když porovnává hodnoty TEXT.
  • Nejvyšší třídou úložiště je BLOB. SQLite používá C funkci memcmp() pro porovnání hodnot BLOB.

Když použijete ORDER BY klauzule k řazení dat do sloupce s různými třídami úložiště, SQLite provede následující kroky:

  • Nejprve seskupte hodnoty na základě třídy úložiště:NULL, INTEGER a REAL, TEXT a BLOB.
  • Zadruhé seřaďte hodnoty v každé skupině.

Následující příkaz seřadí smíšená data v val ve sloupci test_datatypes tabulka:

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

Typování manifestu SQLite a typová afinita

Dalšími důležitými koncepty souvisejícími s datovými typy SQLite jsou typování manifestu a typová afinita:

  • Manifestní typ znamená, že datový typ je vlastností hodnoty uložené ve sloupci, nikoli vlastností sloupce, ve kterém je hodnota uložena. SQLite používá typování manifestu k ukládání hodnot libovolného typu do sloupce.
  • Doporučený typ pro data uložená v tomto sloupci je typová příbuznost sloupce. Všimněte si, že datový typ je doporučený, není vyžadován, proto sloupec může ukládat jakýkoli typ dat.

V tomto tutoriálu jste se dozvěděli o datových typech SQLite a některých důležitých konceptech, včetně tříd úložiště, typování manifestu a příbuznosti typů.


  1. Více databází v dockeru a docker-compose

  2. Snadné nastavení webového serveru pomocí XAMPP

  3. Existují nějaké bezplatné nástroje pro generování skriptů 'INSERT INTO' v MS SQL Server?

  4. Jak vygenerovat příkaz create table sql pro existující tabulku v postgreSQL