W SQLite następująca instrukcja byłaby skuteczna, a łańcuch zostałby wstawiony / zaktualizowany w SALARY
kolumnie typu INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Zauważ, że zero nie zostanie wstawione / zaktualizowane, ale rzeczywisty ciąg „ZBYT DUŻO” , więc nie chodzi o automatyczną konwersję typu.
FAQ stanowi:
To funkcja , a nie błąd. SQLite używa dynamicznego pisania. Nie wymusza ograniczeń typu danych. Dane dowolnego typu można (zwykle) wstawić do dowolnej kolumny. Możesz umieszczać ciągi o dowolnej długości w kolumnach liczb całkowitych, liczb zmiennoprzecinkowych w kolumnach boolowskich lub dat w kolumnach znakowych. Typ danych przypisany do kolumny w poleceniu CREATE TABLE nie ogranicza danych, które można umieścić w tej kolumnie. Każda kolumna może przechowywać łańcuch o dowolnej długości. (Jest jeden wyjątek: kolumny typu INTEGER PRIMARY KEY mogą zawierać tylko 64-bitową liczbę całkowitą ze znakiem. Błąd pojawi się, jeśli spróbujesz umieścić coś innego niż liczba całkowita w kolumnie INTEGER PRIMARY KEY.)
Więc to zachowanie jest wyraźnie zamierzone, niemniej jednak zastanawiam się, dlaczego SQLite ma takie zachowanie, ponieważ większość innych baz danych SQL, które znam, zachowują się zupełnie inaczej, powodowałyby błąd lub konwersję ciągu 0 podczas próby wstawienia ciągu nienumerycznego do kolumna numeryczna.
Czy biblioteka SQLite byłaby mniej przydatna bez tego zachowania?
Czy jest to tak zaprojektowane, aby biblioteka była mała i szybka?
Czy biblioteka SQLite byłaby znacznie wolniejsza lub większa w celu zwiększenia błędów podczas próby wstawienia ciągu do kolumny numerycznej?