Numeric data types
Informix®
Informix supports several data types to store numbers:
Informix data type | Description |
---|---|
SMALLINT |
16 bit signed integer |
INTEGER |
32 bit signed integer |
BIGINT |
64 bit signed integer |
INT8 |
64 bit signed integer (replaced by
BIGINT ) |
DECIMAL |
Equivalent to DECIMAL(16) |
DECIMAL(p) |
Floating-point decimal number (max precision is 32) |
DECIMAL(p,s) |
Fixed-point decimal number (max precision is 32) |
MONEY |
Equivalent to DECIMAL(16,2) |
MONEY(p) |
Equivalent to DECIMAL(p,2) (max precision is
32) |
MONEY(p,s) |
Equivalent to DECIMAL(p,s) (max precision is
32) |
REAL / SMALLFLOAT |
32-bit floating point decimal (C float) |
DOUBLE PRECISION / FLOAT[(n)] |
64-bit floating point decimal (C double) |
SQLite
SQLite 3 supports INTEGER
(8 byte integer) and REAL
(8 byte
floating point) as native types to store numbers, but allows also synonyms:
Supported synonyms | SQLite type affinity |
---|---|
INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT,
UNSIGNED BIG INT, INT2, INT8 |
INTEGER (8 bytes!) |
REAL, DOUBLE, DOUBLE PRECISION, FLOAT |
REAL (8 bytes!) |
DECIMAL(p,s), NUMERIC |
NUMERIC (based on
REAL ) |
Exact decimal types like DECIMAL(p,s)
may be stored as
floating point numbers (REAL
), INTEGER
or TEXT
types, according to the type affinity selected by SQLite. When converted to floating point type,
data loss and rounding rule differences are possible with SQLite.
Solution
Informix numeric types are not translated by the SQLite database driver: The numeric types are used as is when creating tables, since SQLite supports a wide range of type synonyms.
Since SQLite 3 does not have exact decimal types like DECIMAL(p,s)
, you must
pay attention to the rounding rules and data loss when using numbers with many significant digits.
Arithmetic operations like division have different results than with Informix. It is better to fetch the original column value into a
DECIMAL
variable, and do arithmetic operations in the application program.
dbi.database.dsname.ifxemul.datatype.smallint = {
true |
false }
dbi.database.dsname.ifxemul.datatype.integer = {
true |
false }
dbi.database.dsname.ifxemul.datatype.bigint = {
true |
false }
dbi.database.dsname.ifxemul.datatype.int8 = {
true |
false }
dbi.database.dsname.ifxemul.datatype.decimal = {
true |
false }
dbi.database.dsname.ifxemul.datatype.money = {
true |
false }
dbi.database.dsname.ifxemul.datatype.float = {
true |
false }
dbi.database.dsname.ifxemul.datatype.smallfloat = {
true |
false }
For more details see IBM Informix emulation parameters in FGLPROFILE.