Data Type Conversion
On this page
The global sync variable data_ controls the way certain data type conversions are performed.
The following table lists the supported values and the data type conversion checks and behavior changes that are introduced with each data_ value.'7. level will fail the conversion of 'abc' to an integer value, while the '6. level will silently convert it to a NULL or 0.
|
data_ |
Data Type Conversion Checks |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
SingleStore recommends using the highest available data_ value for new application development.data_ can change the behavior of expressions in computed columns.
If a computed column value changes due to a change in data_, columnstore sorting, indexes, and sharding can become logically corrupted.data_ or sql_ changes.
Note
sql_ is persisted to the CREATE TABLE statement.sql_ that the table is created with, which may be different from the current sql_.
Handling invalid source database DATE and DATETIME values during Flow migrations
When using SingleStore Flow to migrate data from supported source databases into SingleStore, the source data may contain non-standard or invalid DATE or DATETIME values such as 0001-01-01 07:07:24 or 0000-12-01.data_ is set to a stricter setting, loading this data can fail with an error such as:
Error(PGT54): Table core_data.`mage_order` stage 3 error java.sql.SQLException: (conn=142441) Leaf Error (node-83201ac7-c278-4902-8df7-ab7902e5adb3-leaf-ag2-0.svc-83201ac7-c278-4902-a1f2-600f50d9b580:3306): Invalid DATE/TIME in type conversion for column 'col_datetime'
To work around this issue without modifying the source data, temporarily set the compatibility to an earlier version such as 6.:
SET GLOBAL data_conversion_compatibility_level = '6.5';
For example, the following executes successfully:
DROP TABLE IF EXISTS date_tbl;CREATE TABLE date_tbl (id INT PRIMARY KEY NOT NULL,d DATETIME);INSERT date_tbl VALUES (1, '0001-01-01 07:07:24.000000');SELECT * FROM date_tbl;
Important
By default, SingleStore recommends using the highest available data_ to enforce strict validation.
Best Practices to Avoid Data Corruption
-
Review the computed column expressions before changing
data_.conversion_ compatibility_ level -
Perform application upgrade tests.
For example, if a computed column contains corrupted data and you have to switch to a higher data_, you may need to drop the computed column before changing the level.
The following examples demonstrate how the behavior of expressions may change if data_ is changed.
Example 1
SET GLOBAL data_conversion_compatibility_level = '6.0';
SELECT DATE('2019-04-20') + 2;
+------------------------+
| DATE('2019-04-20') + 2 |
+------------------------+
| 20190422 |
+------------------------+Example 2
SET GLOBAL data_conversion_compatibility_level = '7.0';
SELECT DATE('2019-04-20') + 2;
+------------------------+
| DATE('2019-04-20') + 2 |
+------------------------+
| 2019-04-22 |
+------------------------+Example 3
The following example shows the error message generated when an attempt is made to insert a zero value into a DATE, DATETIME, or DATETIME(6) column if the data_ is set to 7. or higher.
SET GLOBAL data_conversion_compatibility_level = '7.0';
CREATE TABLE dates (dt DATETIME);INSERT INTO dates VALUES ('0000-00-00');
ERROR 2363 (HY000): Leaf Error: Invalid DATE/TIME in type conversionRefer to Time and Date for examples of zero values for DATE, DATETIME, and DATETIME(6) data types.
Last modified: