Answer»
- 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.)
- But SQLite does use the declared type of a column as a hint that you prefer values in that format.
- So, for example, if a column is of type INTEGER and you try to insert a string into that column, SQLite will attempt to convert the string into an integer.
- If it can, it inserts the integer instead. If not, it inserts the string.
- This feature is called type affinity.
|