SET BIND
(Data Type Coercion Rules)
Configures data type coercion rules for the current session
SET BIND OF <type_from> TO <type_to> <type_from> ::= <scalar_datatype> | <blob_datatype> | TIME ZONE | VARCHAR | {CHARACTER | CHAR} VARYING <type_to> ::= <scalar_datatype> | <blob_datatype> | VARCHAR | {CHARACTER | CHAR} VARYING | LEGACY | NATIVE | EXTENDED | EXTENDED TIME WITH TIME ZONE | EXTENDED TIMESTAMP WITH TIME ZONE <scalar_datatype> ::= !! See Scalar Data Types Syntax !! <blob_datatype> ::= !! See BLOB Data Types Syntax !!
This statement makes it possible to substitute one data type with another when performing client-server interactions.In other words, type_from returned by the engine is represented as type_to in the client API.
Note
|
Only fields returned by the database engine in regular messages are substituted according to these rules.Variables returned as an array slice are not affected by the |
When a partial type definition is used (e.g. CHAR
instead of CHAR(n)
) in from_type, the coercion is performed for all CHAR
columns.The special partial type TIME ZONE
stands for TIME WITH TIME ZONE
and TIMESTAMP WITH TIME ZONE
.When a partial type definition is used in to_type, the engine defines missing details about that type automatically based on source column.
Changing the binding of any NUMERIC
or DECIMAL
data type does not affect the underlying integer type.In contrast, changing the binding of an integer data type also affects appropriate NUMERIC
and DECIMAL
types.For example, SET BIND OF INT128 TO DOUBLE PRECISION
will also map NUMERIC
and DECIMAL
with precision 19 or higher, as these types use INT128
as their underlying type.
The special type LEGACY
is used when a data type, missing in previous Firebird version, should be represented in a way, understandable by old client software (possibly with data loss).The coercion rules applied in this case are shown in the table below.
Native data type | Legacy data type |
---|---|
BOOLEAN |
CHAR(5) |
DECFLOAT |
DOUBLE PRECISION |
INT128 |
BIGINT |
TIME WITH TIME ZONE |
TIME WITHOUT TIME ZONE |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITHOUT TIME ZONE |
Using EXTENDED
for type_to causes the engine to coerce to an extended form of the type_from data type.Currently, this works only for TIME/TIMESTAMP WITH TIME ZONE
, they are coerced to EXTENDED TIME/TIMESTAMP WITH TIME ZONE
.The EXTENDED
type contains both the time zone name, and the corresponding GMT offset, so it remains usable if the client application cannot process named time zones properly (e.g. due to the missing ICU library).
Setting a binding to NATIVE
resets the existing coercion rule for this data type and returns it in its native format.
The initial bind rules of a connection be configured through the DPB by providing a semicolon separated list of <type_from> TO <type_to>
options as the string value of isc_dpb_set_bind.
Execution of [fblangref50-management-session-reset-alter] will revert to the binding rules configured through the DPB, or otherwise the system default.
Tip
|
It is also possible to configure a default set of data type coercion rules for all clients through the
See the [fblangref50-management-legacy-coercion-rules] for details.This setting allows legacy client applications to work with Firebird 5.0 without recompiling or otherwise adjusting them to understand the new data types. |