Was bewirkt die folgende SQL-Anweisung im Fall von SQLite?Funktionsweise des benutzerdefinierten Datentyps in SQLite
CREATE TABLE foo(id INTEGER PRIMARY KEY, time STRFTIME);
Beachten Sie, dass die time
Spalte den STRFTIME
Typ hat, die nicht in der documentation aufgeführt ist.
Ich denke, dass die folgende INSERT
Arbeiten ohne Fehler
sqlite> INSERT INTO foo (time) VALUES('text');
sqlite> SELECT * FROM foo;
1|text
aus diesem Grund:
3,1. Bestimmung der Säule Affinity
Die Affinität einer Spalte wird durch den deklarierten Typ der -Säule bestimmt, gemäß den folgenden Regeln in der angegebenen Reihenfolge:
Wenn der deklarierte Typ enthält die Zeichenfolge „INT "Dann wird ihm INTEGER-Affinität zugewiesen.
Wenn der deklarierte Typ der Spalte einen der Zeichenfolgen "CHAR", "CLOB" oder "TEXT" enthält, dann hat diese Spalte die TEXT-Affinität. Beachten Sie, dass der Typ VARCHAR die Zeichenfolge "CHAR" enthält und daher TEXT Affinität zugewiesen ist.
Wenn der deklarierte Typ für eine Spalte die Zeichenfolge "BLOB" enthält oder wenn kein Typ angegeben ist, hat die Spalte Affinität BLOB.
Wenn der deklarierte Typ für eine Spalte einen der Zeichenfolgen "REAL", "FLOA" oder "DOUB" enthält, hat die Spalte die REAL-Affinität.
5. Ansonsten ist die Affinität ZIFFERN.
und diese:
Eine Spalte mit NUMERIC-Affinität kann Werte mit allen fünf Speicherklassen enthalten. Wenn Textdaten in eine NUMERIC-Spalte eingefügt werden, wird die Speicherklasse des Texts in INTEGER oder REAL (in der Reihenfolge Präferenz) konvertiert, wenn eine solche Konvertierung verlustfrei und reversibel ist. Bei Konvertierungen zwischen TEXT- und REAL-Speicherklassen berücksichtigt SQLite die Konvertierung als verlustfrei und reversibel, wenn die ersten 15 signifikanten Dezimalziffern der Zahl beibehalten werden. Wenn die verlustfreie Konvertierung von TEXT in INTEGER oder REAL nicht möglich ist, wird der Wert mit der Speicherklasse TEXT gespeichert. Es wird kein Versuch gemacht NULL oder BLOB-Werte I
Am Recht zu konvertieren?