The precision for DECIMAL data type is up to 65 in MySQL, but the precision for DECIMAL is limited to 38 in Flink. So if you define a decimal column whose precision is greater than 38, you should map it to STRING to avoid precision loss.
NUMERIC(p, s) UNSIGNED
NUMERIC(p, s) UNSIGNED ZEROFILL
DECIMAL(p, s)
DECIMAL(p, s) UNSIGNED
DECIMAL(p, s) UNSIGNED ZEROFILL
FIXED(p, s)
FIXED(p, s) UNSIGNED
FIXED(p, s) UNSIGNED ZEROFILL
where 38 < p <= 65
BOOLEAN
BOOLEAN
TINYINT(1)
BIT(1)
DATE
DATE
TIME [(p)]
TIME [(p)]
TIMESTAMP [(p)]
TIMESTAMP [(p)]
DATETIME [(p)]
CHAR(n)
CHAR(n)
VARCHAR(n)
VARCHAR(n)
BIT(n)
BINARY(⌈(n + 7) / 8⌉)
BINARY(n)
BINARY(n)
VARBINARY(N)
VARBINARY(N)
TINYTEXT
STRING
TEXT
MEDIUMTEXT
LONGTEXT
TINYBLOB
BYTES
Currently, for BLOB data type in MySQL, only the blob whose length isn't greater than 2,147,483,647(2 ** 31 - 1) is supported.
BLOB
MEDIUMBLOB
LONGBLOB
YEAR
INT
ENUM
STRING
JSON
STRING
The JSON data type will be converted into STRING with JSON format in Flink.
SET
ARRAY<STRING>
As the SET data type in MySQL is a string object that can have zero or more values, it should always be mapped to an array of string