|CHAR[ACTER] '(' length ')'||character string with length upperbound|
|VARCHAR '(' length ')' | CHARACTER VARYING '(' length ')'||string with length upperbound limit|
|TEXT | STRING | CLOB | CHARACTER LARGE OBJECT||string with unbounded length|
|BLOB | BINARY LARGE OBJECT||bytes with unbounded length|
|DECIMAL '(' P ',' S ')' | NUMERIC '(' P ',' S ')'||with precision P and scale S. P must be between 1 and 18 (or 38 when HUGEINT is also supported). S must be between 0 and P|
|TINYINT||8 bit signed integer between -127 and 127|
|SMALLINT||16 bit signed integer between -32767 and 32767|
|INT[EGER]||32 bit signed integer between -2147483647 and 2147483647|
|BIGINT||64 bit signed integer between -9223372036854775808 and 9223372036854775808|
|HUGEINT||128 bit signed integer between -2^127 +1 and +2^127 -1
Note: HUGEINT is only available since Jul2015 release and on platforms which C-compiler supports __int128 data type
|REAL||32 bit floating point|
|FLOAT | DOUBLE [PRECISION]||64 bit floating point|
|BOOLEAN||true or false|
All scalar types include a NULL value, which is internally represented as a valid domain value. Arithmetic expressions that overflow may lead to returning the NULL instead.
The integer types align with the storage of 1, 2, 4, 8 and 16 bytes.
The numeric and decimal types are represented as fixed length integers, whose decimal point is produced during result rendering.
The types REAL, FLOAT and DOUBLE map to the underlying implementation system. No special attention is given to the value NaN.