FAQ-实时传输 mysql2doris 字段隐式转换

问题描述/异常栈
来源mysql表字段查询有数据 去向doris写入为0

FAQ-实时传输 mysql2doris 字段隐式转换 - 图1

FAQ-实时传输 mysql2doris 字段隐式转换 - 图2

发现版本
引擎版本:FLINK-1.14 插件版本 2.x
解决方案
jdbc链接串加jdbc:mysql://127.0.0.1:3306/db?tinyInt1isBit=false&transformedBitIsBoolean=false且来源字段和去向字段保持兼容一致 例如:mysql字段兼容替换成tinyint(4)
问题原因
这是 Flink CDC 同步 MySQL 时非常经典的 “tinyint(1) 布尔值陷阱”。

在 MySQL 中,tinyint(1) 通常被用作布尔值(0 表示 false,非 0 表示 true),但它本质上仍是数值。而在 Flink CDC(底层依赖 Debezium 和 MySQL JDBC 驱动)读取时,默认会将 tinyint(1) 隐式转换为 BOOLEAN 类型(true/false)。

当 Flink 将 BOOLEAN(如 true)写入 Doris 的 TINYINT(期望数值)时,Doris 无法将字符串 "true" 解析为数字,导致解析失败。由于 Doris 的 Stream Load 默认非严格模式(strict_mode = false),解析失败的数值字段会被默默置为 0。
排查过程
查看来源和去向有问题的字段ddl

来源表ddl: FAQ-实时传输 mysql2doris 字段隐式转换 - 图3

去向表ddl:

FAQ-实时传输 mysql2doris 字段隐式转换 - 图4


作者:chenjie