SQLite Datentypen: Int, Text, Numeric, Real, Blob

⚡ Intelligente Zusammenfassung

SQLite Datentypen funktionieren anders als in anderen Datenbanken, weil SQLite verwendet dynamische TypenpingDabei wird jeder Wert in jeder Spalte gespeichert. Speicherklassen, Typaffinität und deklarierte Typnamen bestimmen gemeinsam, wie jeder Wert physisch auf der Festplatte gespeichert wird.

  • 🧩 Dynamische Eigenschaftenping: SQLite ist dynamisch typisiert, daher entscheidet der eingefügte Wert und nicht die Spaltendefinition darüber, wie die Daten gespeichert werden.
  • 🗄️ Speicherklassen: Fünf Speicherklassen – NULL, INTEGER, REAL, TEXT und BLOB – beschreiben, wie jeder Wert auf der Festplatte gespeichert wird.
  • 🎯 Typenaffinität: Jeder Spalte wird anhand ihres deklarierten Typnamens eine empfohlene Typzuordnung zugewiesen – TEXT, NUMERIC, INTEGER, REAL oder BLOB.
  • 🔢 Zahlenspeicherung: Jeder deklarierte Typ, der INT enthält, wird zu INTEGER, während REAL, DOUBLE und FLOAT Gleitkommazahlen in acht Bytes speichern.
  • 📅 Datumsangaben und Boolesche Werte: SQLite besitzt keine dedizierte DATE- oder BOOLEAN-Klasse und speichert diese Werte stattdessen als TEXT, REAL oder INTEGER.
  • 🤖 KI-Unterstützung: KI-Text-zu-SQL-Assistenten und GitHub Copilot generieren SQLite Spaltendefinitionen und Auswahl von Datentypen aus der Klartextsprache.

SQLite Datentypen

Die folgenden Abschnitte erklären, wie SQLite Behandelt Datentypen, beginnend mit den fünf Speicherklassen, dann Typaffinität und ihren Zuweisungsregeln und schließlich durchgerechnete Beispiele zum Speichern von ganzen Zahlen, reellen Zahlen, BLOBs, Booleans und Datumsangaben.

Datentypen in SQLite unterscheiden sich von denen anderer Datenbankverwaltungssysteme. SQLiteSie können Datentypen wie gewohnt deklarieren, aber Sie können trotzdem jeden beliebigen Wert in jedem beliebigen Datentyp speichern.

SQLite ist typenlos. Es gibt keine festen Datentypen; Sie können beliebige Datentypen in beliebigen Spalten speichern. Dies wird als dynamischer Typ bezeichnet.ping.

Bei statischen Datentypen, wie in anderen Datenbankmanagementsystemen, können Sie, wenn Sie eine Spalte mit dem Datentyp Integer deklarieren, nur Werte vom Datentyp Integer einfügen. Bei dynamischen Datentypen hingegen, wie in anderen Datenbankmanagementsystemen, können Sie dies tun. SQLiteDer Spaltentyp wird durch den eingegebenen Wert bestimmt, und dann SQLite speichert diesen Wert je nach Typ.

SQLite Speicherklassen

In SQLite Es gibt unterschiedliche Speichermethoden, abhängig vom Datentyp; diese unterschiedlichen Speichermethoden werden in Speicherklassen bezeichnet. SQLite.

Die folgenden Speicherklassen sind verfügbar in SQLite:

  • NULL – Diese Speicherklasse wird zum Speichern eines beliebigen NULL-Werts verwendet.
  • GANZE ZAHL – Jeder numerische Wert wird als vorzeichenbehafteter Integerwert gespeichert (er kann sowohl positive als auch negative Integerwerte aufnehmen). Die INTEGER-Werte in SQLite werden abhängig vom Wert der Zahl entweder in 1, 2, 3, 4, 6 oder 8 Byte Speicher gespeichert.
  • REAL – Diese Speicherklasse dient zum Speichern der Gleitkommawerte und belegt einen Speicherplatz von 8 Bytes.
  • TEXT – Speichert Textzeichenfolgen. Es unterstützt außerdem verschiedene Kodierungen wie UTF-8, UTF-16BE oder UTF-16LE.
  • BLOB – Wird zum Speichern großer Dateien wie Bilder oder Textdateien verwendet. Der Wert wird als Byte-Array gespeichert, genau wie der Eingabewert.

SQLite Affinitätstyp

Die Datentypzugehörigkeit ist der empfohlene Datentyp für die Speicherung in einer Spalte. Sie können jedoch weiterhin beliebige Datentypen speichern; diese Typen sind lediglich Empfehlungen, nicht zwingend erforderlich.

Diese Typen wurden eingeführt SQLite um die Kompatibilität zwischen zu maximieren SQLite und andere Datenbankverwaltungssystems.

Jede in einer deklarierte Spalte SQLite Einer Datenbank wird abhängig von ihrem deklarierten Datentyp eine Typaffinität zugewiesen. Hier ist die Liste der Typaffinitäten in SQLite:

  • TEXT.
  • NUMERISCH.
  • GANZE ZAHL.
  • ECHT.
  • KLECKS.

Hier ist, wie SQLite Bestimmt die Datenaffinität einer Spalte anhand ihres deklarierten Datentyps:

  • Die INTEGER-Affinität wird zugewiesen, wenn der deklarierte Typ die enthält Schnur „INT“.
  • Die Datentyp-Affinität TEXT wird zugewiesen, wenn die Spalte in ihrem Datentyp eine der folgenden Zeichenfolgen enthält: „TEXT“, „CHAR“ oder „CLOB“. Beispielsweise wird dem Datentyp VARCHAR die Datentyp-Affinität TEXT zugewiesen.
  • BLOB-Affinität wird zugewiesen, wenn für die Spalte kein Typ angegeben ist oder der Datentyp ein BLOB ist.
  • Die Affinität REAL wird zugewiesen, wenn der Typ eine der folgenden Zeichenketten enthält: „DOUB“, „REAL“ oder „FLOAT“.
  • Die Affinität NUMERIC wird jedem anderen Datentyp zugewiesen.

Weiter unten befindet sich außerdem eine Tabelle mit einigen Beispielen der Karte.ping zwischen SQLite Datentypen und ihre Affinitäten werden durch diese Regeln bestimmt:

Karteping zwischen SQLite Deklarierte Datentypen und ihre zugewiesenen Typaffinitäten, anhand von Beispielen für INT, CHAR, TEXT, BLOB, REAL, FLOAT und NUMERIC.

Beispiele für das Speichern von Datentypen in SQLite

Nummern speichern mit SQLite GANZE ZAHL

Wenn eine Spalte einen Datentyp aufweist, der das Wort „INT“ enthält, wird ihr die Datentyp-Affinität INTEGER zugewiesen. Sie wird in einer INTEGER-Speicherklasse gespeichert.

Allen folgenden Datentypen ist die Typaffinität INTEGER zugewiesen:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • TINYINT, SMALLINT, MEDIUMINT.

INTEGER-Typaffinität in SQLite kann jede zugewiesene ganze Zahl (positiv oder negativ) von 1 Byte bis maximal 8 Byte speichern.

Nummern speichern mit SQLite REAL

REELLE Zahlen sind Zahlen mit doppelter Gleitkomma-Genauigkeit. SQLite Speichert reelle Zahlen als 8-Byte-Array. Hier ist die Liste der Datentypen in SQLite die Sie zum Speichern von REAL-Zahlen verwenden können:

  • ECHT.
  • DOPPELT.
  • DOPPELTE PRÄZISION.
  • SCHWEBEN.

Speichern großer Datenmengen mit SQLite BLOB

Es gibt nur eine Möglichkeit, große Dateien in einem SQLite Die Datenbank verwendet den BLOB-Datentyp. Dieser Datentyp dient zum Speichern großer Dateien wie Bilder oder Dateien beliebigen Typs. Die Datei wird in ein Byte-Array umgewandelt und anschließend in der gleichen Größe wie die Eingabedatei gespeichert.

Speicherung SQLite Booleans

SQLite verfügt nicht über eine separate BOOLEAN-Speicherklasse. Stattdessen werden BOOLEAN-Werte als INTEGERS gespeichert, wobei 0 für „falsch“ und 1 für „wahr“ steht.

Speicherung SQLite Daten und Uhrzeiten

Sie können Datumsangaben oder Datums- und Uhrzeitangaben in SQLite mithilfe eines der folgenden Datentypen:

  • DATUM
  • Datetime
  • TIMESTAMP
  • ZEIT-

Beachten Sie, dass es keine separate Speicherklasse für DATE oder DATETIME gibt. SQLiteStattdessen werden alle Werte, die mit einem der vorherigen Datentypen deklariert wurden, in einer Speicherklasse gespeichert, die vom Datumsformat des eingefügten Werts abhängt, und zwar wie folgt:

  • TEXT – wenn Sie den Datumswert im Format einer ISO8601-Zeichenfolge einfügen („YYYY-MM-DD HH:MM:SS.SSS“).
  • REAL – Wenn Sie den Datumswert als Julianische Tageszahl eingeben, also die Anzahl der Tage seit Mittag in Greenwich am 24. November 4714 v. Chr., wird der Datumswert dann als REAL gespeichert.
  • GANZE ZAHL - wie Unix Zeit, die Anzahl der Sekunden seit dem 1970 01:01:00 UTC.

Häufig gestellte Fragen

Eine Speicherklasse ist wie SQLite Speichert physisch einen Wert: NULL, INTEGER, REAL, TEXT oder BLOB, der zur Laufzeit für jeden Wert festgelegt wird. Die Typaffinität ist die Klasse, die eine Spalte bevorzugt, ausgewählt aus ihrem deklarierten Typnamen. SQLite versucht sich zu bewerben.

Nein. SQLite Die Zahl in Klammern wird ignoriert, daher verhalten sich VARCHAR(50) und VARCHAR identisch. Beide erhalten die TEXT-Affinität, da der Typname CHAR enthält. SQLite Es wird keine Längenbeschränkung außer dem globalen Wert SQLITE_MAX_LENGTH festgelegt.

Verwenden Sie die Funktion `typeof()` in einer Abfrage, z. B. `SELECT typeof(Spalte) FROM Tabelle`. Sie gibt die tatsächliche Speicherklasse des Werts zurück – `null`, `integer`, `real`, `text` oder `blob` –, die aufgrund dynamischer Typisierung vom deklarierten Typ der Spalte abweichen kann.ping.

STRICT-Tabellen, hinzugefügt in SQLite 3.37, Typaffinität deaktivieren und alle Werte ablehnen, die nicht dem deklarierten Typ einer Spalte entsprechen. Nur INT, INTEGER, REAL, TEXT, BLOB und ANY sind zulässig, was die starre Typzuordnung ermöglicht.ping in anderen Datenbanken gefunden.

Geldbeträge sollten als INTEGER in der kleinsten Einheit, z. B. Cent, gespeichert werden, um Rundungsfehler von Gleitkommazahlen zu vermeiden. Bei variabler oder sehr hoher Genauigkeit speichert der Datentyp TEXT die exakte Zahlenfolge. SQLite hat keine dedizierte Festpunktgeldart.

Die Einstellung `SQLITE_MAX_LENGTH` begrenzt die Länge eines TEXT- oder BLOB-Werts und ist standardmäßig auf eine Milliarde Bytes festgelegt. Die aktuelle Implementierung unterstützt bis zu 2,147,483,647 Bytes. Bei Bedarf kann das Limit zur Laufzeit über die Schnittstelle `sqlite3_limit()` reduziert werden.

Ja. KI-Text-zu-SQL-Assistenten wandeln eine Beschreibung in einfachem Englisch in CREATE TABLE-Anweisungen um und wählen dabei die gewünschten Tabellen aus. SQLite Speicherklassen und -affinitäten wie INTEGER, TEXT und REAL. Die Angabe vorhandener Spaltentypen verbessert die Genauigkeit, und der generierte SQL-Code sollte vor der Ausführung überprüft werden.

Ja. GitHub-Copilot schlägt Spaltendefinitionen vor SQLite Datentypen wie INTEGER, TEXT, REAL und BLOB können in Editoren wie diesen direkt im Text verarbeitet werden. VS CodeEs liest das umgebende Schema und den Migrationscode, sodass die Vervollständigungen Ihre tatsächlichen Tabellen- und Spaltennamen wiederverwenden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: