Working with database data types
When a table is created in a database, the SQL statement for creating the table
defines the affinity, or data type, for each column in the table. Although
affinity declarations can be omitted, it's a good idea to explicitly declare
column affinity in your CREATE TABLE
SQL statements.
As a general rule, any object that you store in a database using an INSERT
statement is returned as an instance of the same data type when you execute a
SELECT
statement. However, the data type of the retrieved value can be
different depending on the affinity of the database column in which the value is
stored. When a value is stored in a column, if its data type doesn't match the
column's affinity, the database attempts to convert the value to match the
column's affinity. For example, if a database column is declared with NUMERIC
affinity, the database attempts to convert inserted data into a numeric storage
class ( INTEGER
or REAL
) before storing the data. The database throws an
error if the data can't be converted. According to this rule, if the String
"12345" is inserted into a NUMERIC
column, the database automatically converts
it to the integer value 12345 before storing it in the database. When it's
retrieved with a SELECT
statement, the value is returned as an instance of a
numeric data type (such as Number) rather than as a String instance.
The best way to avoid undesirable data type conversion is to follow two rules. First, define each column with the affinity that matches the type of data that it is intended to store. Next, only insert values whose data type matches the defined affinity. Following these rules provides two benefits. When you insert the data it isn't converted unexpectedly (possibly losing its intended meaning as a result). In addition, when you retrieve the data it is returned with its original data type.
For more information about the available column affinity types and using data types in SQL statements, see the Data type support.