In SQLite la seguente dichiarazione sarebbe andata a buon fine e la stringa verrebbe inserita / aggiornata nella colonna SALARY
che è di tipo INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Nota che lo zero non verrà inserito / aggiornato ma la stringa "TROPPO" attuale, quindi non si tratta della conversione del tipo automatico.
Le domande frequenti:
This is a feature, not a bug. SQLite uses dynamic typing. It does not enforce data type constraints. Data of any type can (usually) be inserted into any column. You can put arbitrary length strings into integer columns, floating point numbers in boolean columns, or dates in character columns. The datatype you assign to a column in the CREATE TABLE command does not restrict what data can be put into that column. Every column is able to hold an arbitrary length string. (There is one exception: Columns of type INTEGER PRIMARY KEY may only hold a 64-bit signed integer. An error will result if you try to put anything other than an integer into an INTEGER PRIMARY KEY column.)
Quindi questo comportamento è chiaramente intenzionale, tuttavia mi chiedo perché SQLite ha questo comportamento, dal momento che la maggior parte degli altri database SQL che conosco si comportano in modo abbastanza diverso, potrebbero generare un errore o convertire la stringa 0, quando provi ad inserire una stringa non numerica in una colonna numerica.
-
La libreria SQLite sarebbe meno utile senza questo comportamento?
-
Questo è stato progettato in modo da mantenere la libreria piccola e veloce?
-
La libreria SQLite sarebbe notevolmente più lenta o più grande per aumentare gli errori quando si tenta di inserire una stringa in una colonna numerica?