In SQLite wäre die folgende Anweisung erfolgreich und die Zeichenfolge würde in die SALARY
Spalte vom Typ eingefügt / aktualisiert INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Beachten Sie, dass Null nicht eingefügt / aktualisiert wird, sondern die eigentliche Zeichenfolge "TOO MUCH". Es handelt sich also nicht um eine authomatische Typkonvertierung.
In den FAQ heißt es:
Dies ist eine Funktion , kein Fehler. SQLite verwendet die dynamische Typisierung. Es werden keine Datentypeinschränkungen erzwungen. Daten jeglicher Art können (normalerweise) in jede Spalte eingefügt werden. Sie können Zeichenfolgen beliebiger Länge in Ganzzahlspalten, Gleitkommazahlen in Booleschen Spalten oder Datumsangaben in Zeichenspalten einfügen. Der Datentyp, den Sie einer Spalte im Befehl CREATE TABLE zuweisen, schränkt nicht ein, welche Daten in diese Spalte eingefügt werden können. Jede Spalte kann eine Zeichenfolge beliebiger Länge enthalten. (Es gibt eine Ausnahme: Spalten vom Typ INTEGER PRIMARY KEY dürfen nur eine 64-Bit-Ganzzahl mit Vorzeichen enthalten. Ein Fehler tritt auf, wenn Sie versuchen, etwas anderes als eine Ganzzahl in eine Spalte INTEGER PRIMARY KEY einzufügen.)
Dieses Verhalten ist also eindeutig beabsichtigt, dennoch frage ich mich, warum SQLite dieses Verhalten hat, da sich die meisten anderen mir bekannten SQL-Datenbanken ganz anders verhalten und einen Fehler verursachen oder die Zeichenfolge 0 konvertieren würden, wenn versucht wird, eine nicht numerische Zeichenfolge in einzufügen eine numerische Spalte.
Wäre die SQLite-Bibliothek ohne dieses Verhalten weniger nützlich?
Ist dies beabsichtigt, um die Bibliothek klein und schnell zu halten?
Wäre die SQLite-Bibliothek erheblich langsamer oder größer, um Fehler zu verursachen, wenn versucht wird, eine Zeichenfolge in eine numerische Spalte einzufügen?