sql >> Database >  >> RDS >> SQLite

SQLite-gegevenstypen

Samenvatting :in deze zelfstudie leert u over het SQLite-gegevenstypesysteem en de gerelateerde concepten zoals opslagklassen, manifest typen en typeaffiniteit.

Inleiding tot SQLite-gegevenstypen

Als je van andere databasesystemen zoals MySQL en PostgreSQL komt, merk je dat ze statisch typen gebruiken . Dit betekent dat wanneer u een kolom met een specifiek gegevenstype declareert, die kolom alleen gegevens van het gedeclareerde gegevenstype kan opslaan.

Anders dan andere databasesystemen, gebruikt SQLite een dynamisch type systeem . Met andere woorden, een waarde die in een kolom is opgeslagen, bepaalt het gegevenstype, niet het gegevenstype van de kolom.

Bovendien hoeft u geen specifiek gegevenstype voor een kolom te declareren wanneer u een tabel maakt. Als u een kolom declareert met het gegevenstype integer, kunt u alle soorten gegevenstypen opslaan, zoals tekst en BLOB, SQLite zal hier niet over klagen.

SQLite biedt vijf primitieve gegevenstypen die opslagklassen worden genoemd.

Opslagklassen beschrijven de formaten die SQLite gebruikt om gegevens op schijf op te slaan. Een opslagklasse is algemener dan een gegevenstype, bijvoorbeeld INTEGER opslagklasse omvat 6 verschillende soorten gehele getallen. In de meeste gevallen kunt u opslagklassen en gegevenstypen door elkaar gebruiken.

De volgende tabel illustreert 5 opslagklassen in SQLite:

Opslagklasse Betekenis
NULL NULL-waarden betekenen ontbrekende informatie of onbekend.
INTEGER Gehele getallen zijn gehele getallen (positief of negatief). Een geheel getal kan variabele grootten hebben, zoals 1, 2,3, 4 of 8 bytes.
ECHT Reële waarden zijn reële getallen met decimale waarden die 8-byte floats gebruiken.
TEKST TEXT wordt gebruikt om karaktergegevens op te slaan. De maximale lengte van TEXT is onbeperkt. SQLite ondersteunt verschillende tekencoderingen.
BLOB BLOB staat voor een binair groot object dat alle soorten gegevens kan opslaan. De maximale grootte van BLOB is theoretisch onbeperkt.

SQLite bepaalt het gegevenstype van een waarde op basis van het gegevenstype volgens de volgende regels:

  • Als een letterlijke waarde geen aanhalingstekens en decimaalteken of exponent heeft, wijst SQLite de INTEGER-opslagklasse toe.
  • Als een liter tussen enkele of dubbele aanhalingstekens staat, wijst SQLite de TEXT-opslagklasse toe.
  • Als een letterlijke waarde geen aanhalingsteken, komma of exponent heeft, wijst SQLite een REAL-opslagklasse toe.
  • Als een letterlijke waarde NULL is zonder aanhalingstekens, heeft deze een NULL-opslagklasse toegewezen.
  • Als een letterlijke de X'ABCD' of x 'abcd' heeft, heeft SQLite een BLOB-opslagklasse toegewezen.

SQLite ondersteunt geen ingebouwde datum- en tijdopslagklassen. U kunt echter de TEXT, INT of REAL gebruiken om datum- en tijdwaarden op te slaan. Raadpleeg de SQLite-zelfstudie over datum en tijd voor gedetailleerde informatie over het omgaan met datum- en tijdwaarden.

SQLites biedt de typeof() functie waarmee u de opslagklasse van een waarde kunt controleren op basis van het formaat. Zie het volgende voorbeeld:

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

Een enkele kolom in SQLite kan gemengde gegevenstypen opslaan. Zie het volgende voorbeeld.

Maak eerst een nieuwe tabel met de naam test_datatypes om te testen.

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

Ten tweede, voeg gegevens in de test_datatypes . in tafel.

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)

Gebruik ten derde de typeof() functie om het gegevenstype van elke waarde te krijgen die is opgeslagen in de val kolom.

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

U kunt zich afvragen hoe SQLite gegevens sorteert in een kolom met verschillende opslagklassen, zoals de kolom val hierboven.

Om dit op te lossen, biedt SQLite de volgende set regels als het gaat om sorteren:

  • NULL-opslagklasse heeft de laagste waarde. Het is lager dan alle andere waarden. Tussen NULL-waarden is er geen volgorde.
  • De volgende hogere opslagklassen zijn INTEGER en REAL. SQLite vergelijkt INTEGER en REAL numeriek.
  • De volgende hogere opslagklasse is TEXT. SQLite gebruikt de verzameling van TEKST-waarden wanneer het de TEKST-waarden vergelijkt.
  • De hoogste opslagklasse is de BLOB. SQLite gebruikt de C-functie memcmp() om BLOB-waarden te vergelijken.

Wanneer u de ORDER BY . gebruikt clausule om de gegevens in een kolom met verschillende opslagklassen te sorteren, voert SQLite de volgende stappen uit:

  • Groep eerst waarden op basis van opslagklasse:NULL, INTEGER en REAL, TEXT en BLOB.
  • Ten tweede, sorteer de waarden in elke groep.

De volgende instructie sorteert de gemengde gegevens in de val kolom van de test_datatypes tafel:

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

SQLite manifest typen &typeaffiniteit

Andere belangrijke concepten met betrekking tot SQLite-gegevenstypen zijn manifest typen en typeaffiniteit:

  • Manifesttypering betekent dat een gegevenstype een eigenschap is van een waarde die is opgeslagen in een kolom, niet de eigenschap van de kolom waarin de waarde is opgeslagen. SQLite gebruikt manifest typen om waarden van elk type in een kolom op te slaan.
  • Typeaffiniteit van een kolom is het aanbevolen type voor gegevens die in die kolom zijn opgeslagen. Merk op dat het gegevenstype wordt aanbevolen en niet vereist, daarom kan een kolom elk type gegevens opslaan.

In deze zelfstudie hebt u geleerd over SQLite-gegevenstypen en enkele belangrijke concepten, waaronder opslagklassen, manifest typen en typeaffiniteit.


  1. Bereken het aantal gelijktijdige gebeurtenissen in SQL

  2. Hoe UTC naar lokale tijd te converteren in MySQL

  3. Hoe kopieer ik gegevens van de ene tabel naar een andere nieuwe tabel in MySQL?

  4. PDO-bindingswaarden voor MySQL IN-instructie