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.