Datentypen in SQLite unterscheiden sich von anderen Datenbankverwaltungssystemen. In SQLite können Sie Datentypen normal deklarieren, aber Sie können trotzdem jeden Wert in jedem Datentyp speichern.
In diesem Tutorial lernen Sie:
- Speicherklassen
- Affinitätstyp
- Beispiele zum Speichern von Datentypen in SQLite
SQLite ist weniger typisiert. Es gibt keine Datentypen. Sie können jeden beliebigen Datentyp in einer beliebigen Spalte speichern. Dies nennt man dynamische Typen.
Wenn Sie in statischen Typen wie in anderen Datenbankverwaltungssystemen eine Spalte mit einer Datentyp-Ganzzahl deklariert haben, können Sie nur Werte der Datentyp-Ganzzahl einfügen. Bei dynamischen Typen wie in SQLite wird der Typ der Spalte jedoch durch den eingefügten Wert bestimmt. Und dann speichert SQLite diesen Wert abhängig von seinem Typ.
SQLite-Speicherklassen
In SQLite gibt es je nach Wertetyp unterschiedliche Speichermethoden. Diese unterschiedlichen Speichermethoden werden in SQLite als Speicherklassen bezeichnet.
Im Folgenden sind die in SQLite verfügbaren Speicherklassen aufgeführt:
- NULL - Diese Speicherklasse wird zum Speichern eines beliebigen NULL-Werts verwendet.
- INTEGER - Jeder numerische Wert wird als vorzeichenbehafteter ganzzahliger Wert gespeichert (er kann sowohl positive als auch negative ganzzahlige Werte enthalten). Die INTEGER-Werte in SQLite werden je nach Wert der Zahl entweder in 1, 2, 3, 4, 6 oder 8 Byte gespeichert.
- REAL - Diese Speicherklasse wird zum Speichern der Gleitkommawerte verwendet und in einem 8-Byte-Speicher gespeichert.
- TEXT - speichert Textzeichenfolgen. Es unterstützt auch verschiedene Codierungen wie UTF-8, UTF-16 BE oder UTF-26LE.
- BLOB - wird zum Speichern großer Dateien wie Bilder oder Textdateien verwendet. Der Wert wird genauso wie der Eingabewert als Byte-Array gespeichert.
SQLite-Affinitätstyp
Die Typaffinität ist der empfohlene Datentyp, der in einer Spalte gespeichert wird. Sie können jedoch weiterhin alle Arten von Daten speichern, wie Sie möchten. Diese Typen werden empfohlen und sind nicht erforderlich.
Diese Typen wurden in SQLite eingeführt, um die Kompatibilität zwischen SQLite und anderen Datenbankverwaltungssystemen zu maximieren.
Jeder in einer SQLite-Datenbank deklarierten Spalte wird abhängig vom deklarierten Datentyp eine Typaffinität zugewiesen. Hier die Aufhebung der Typaffinitäten in SQLite:
- TEXT.
- NUMERISCH.
- GANZE ZAHL.
- ECHT.
- KLECKS.
So bestimmt SQLite die Affinität der Spalte anhand ihres deklarierten Datentyps:
- Die INTEGER-Affinität wird zugewiesen, wenn der deklarierte Typ die Zeichenfolge " INT " enthält.
- Die TEXT-Affinität wird zugewiesen, wenn die Spalte in ihrem Datentyp eine der folgenden Zeichenfolgen " TEXT ", " CHAR " oder " CLOB " enthält. Beispielsweise wird dem Typ VARCHAR die TEXT-Affinität zugewiesen.
- Die BLOB-Affinität wird zugewiesen, wenn für die Spalte kein Typ angegeben ist oder der Datentyp ein BLOB ist.
- Die REAL-Affinität wird zugewiesen, wenn der Typ eine der folgenden Zeichenfolgen " DOUB ", " REAL " oder " FLOAT " enthält.
- Die numerische Affinität wird jedem anderen Datentyp zugewiesen.
Auf derselben Seite befindet sich auch eine Tabelle mit einigen Beispielen für die Zuordnung zwischen SQLite-Datentypen und ihren durch diese Regeln bestimmten Affinitäten:
Beispiele zum Speichern von Datentypen in SQLite:
Speichern der Nummer mit SQLite-Ganzzahl:
Jede Spalte des Datentyps enthält das Wort "INT". Ihr wird eine Affinität vom Typ INTEGER zugewiesen. Es wird in einer INTEGER-Speicherklasse gespeichert.
Alle folgenden Datentypen werden als INTEGER-Typaffinität zugewiesen:
- INT, INTEGER, BIGINT.
- INT2, INT4, INT8.
- TINYINT, SMALLINT, MEDIUM INT.
Die INTEGER-Typaffinität in SQLite kann eine beliebige zugewiesene Ganzzahl (positiv oder negativ) von 1 Byte bis maximal 8 Byte enthalten.
Speichern von Zahlen mit SQLite REAL:
REAL-Zahlen sind Zahlen mit doppelter Gleitkomma-Genauigkeit. SQLite hat reelle Zahlen als 8-Byte-Array gespeichert. Hier ist die Liste der Datentypen in SQLite, mit denen Sie REAL-Nummern speichern können:
- ECHT.
- DOPPELT.
- DOPPELTE GENAUIGKEIT.
- SCHWEBEN.
Speichern großer Datenmengen mit SQLite BLOB:
Es gibt nur eine Möglichkeit, große Dateien in einer SQLite-Datenbank zu speichern, und es wird der BLOB-Datentyp verwendet. Dieser Datentyp wird zum Speichern großer Dateien wie Bilder, Dateien (von jedem Typ) usw. verwendet. Die Datei wird in ein Byte-Array konvertiert und dann in derselben Größe wie die Eingabedatei gespeichert.
Speichern von SQLite-Booleschen Werten:
SQLite verfügt nicht über eine separate BOOLEAN-Speicherklasse. Die BOOLEAN-Werte werden jedoch als INTEGERS mit den Werten 0 (als falsch) oder 1 (als wahr) gespeichert.
Speichern von SQLite-Daten und -Zeiten:
Sie können Datum oder Datums- und Uhrzeitangaben in SQLite mit einem der folgenden Datentypen deklarieren:
- DATUM
- TERMINZEIT
- TIMESTAMP
- ZEIT
Beachten Sie, dass es in SQLite keine separate Speicherklasse DATE oder DATETIME gibt. Stattdessen werden alle Werte, die mit einem der vorherigen Datentypen deklariert wurden, abhängig vom Datumsformat des eingefügten Werts wie folgt in einer Speicherklasse gespeichert:
- TEXT - wenn Sie den Datumswert im Format der ISO8601-Zeichenfolge eingefügt haben ("JJJJ-MM-TT HH: MM: SS.SSS").
- REAL - Wenn Sie den Datumswert in die julianischen Tageszahlen einfügen, die Anzahl der Tage seit Mittag in Greenwich am 24. November 4714 v. Chr., Wird der Datumswert als REAL gespeichert.
- INTEGER als Unix-Zeit, die Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC.
Zusammenfassung:
SQLite unterstützt eine breite Palette von Datentypen. Gleichzeitig ist es jedoch sehr flexibel in Bezug auf Datentypen. Sie können einen beliebigen Werttyp in einen beliebigen Datentyp einfügen. Im Gegensatz zu anderen Datenbankverwaltungssystemen hat SQLite auch einige neue Konzepte für Datentypen wie Typaffinität und Speicherklassen eingeführt.