⌘CtrlK
Appearance
Appearance
现象:同一个表,用数据加工(DI)抽数报错,但用数据同步(SeaTunnel)正常;或目标表数据与源表不符。
解决步骤:
对比字段长度
检查源表和目标表字段长度,尤其注意中文字节数差异(如 DM 中 VARCHAR(6) 可存 6 个中文,StarRocks 只能存 2 个)。放大目标表字段长度。
检查空值处理
SeaTunnel 可能自动将空值转为空字符串,DI 可能报错。在作业中添加“空值替换”组件,将 null 转为默认值。
核对字段映射
在字段选择组件中,手动指定目标字段类型,避免依赖默认映射。
检查权限一致性
确保 DI 和 SeaTunnel 使用的数据库账号对源和目标表权限一致。
现象:Excel 导入后整数变浮点数(123 → 123.0),或小数位数被截断。
解决步骤:
Excel 输入组件中指定字段类型为 String,然后通过字段选择转为整数。
使用 JavaScript 组件转换
var intVal = parseInt(row.getString("field"), 10);
row.setValue("field", intVal);MySQL TINYINT(1) 误转布尔
在 JDBC URL 中添加 tinyInt1isBit=false。
若为 SQL Server 数字精度问题,申请补丁 DWS7.0.2_SERVER_20250529_P1。
现象:IDE 试运行日志中文乱码;CSV 导入后中文变问号;数据库存储乱码。

解决步骤:
检查操作系统编码echo $LANG,确保为 zh_CN.UTF-8,若不是则修改 /etc/locale.conf。
JDBC URL 添加编码参数
MySQL:useUnicode=true&characterEncoding=UTF-8
Oracle:?useUnicode=true&characterEncoding=UTF-8
检查数据库字符集
MySQL:SHOW CREATE TABLE 表名,确认表字符集为 UTF-8,若不是则修改。
文件输入组件指定编码
在 CSV/Excel 输入组件中,明确选择“UTF-8”或源文件实际编码。
若 IDE 日志乱码,请参考排查。
此问题一般与dolphin数据库配置或所连接数据库有关,请参考如下排查:
dolphin数据库新建时的编码格式是utf8
检查dolphin数据库配置/dolphin/bin/env/dolphinscheduler_env.sh,确保数据库url参数已使用utf-8编码参数 ?useUnicode=true&characterEncoding=UTF-8
使用命令查看dolphin数据库各部分编码格式。SHOW VARIABLES LIKE 'CHARACTER%'; 
找到mysql配置文件,此处以windows系统为例,D:/MySql/my.ini,修改character-set-server为uft8,重启mysql数据库。 
使用命令重新查看数据库各部分编码格式,SHOW VARIABLES LIKE 'CHARACTER%'; 正确如下。注:重启dolphin,新建作业执行 
NumberFormatException 现象:执行作业时报 java.lang.NumberFormatException,或 LocalDate cannot be cast to java.util.Date。
解决步骤:
检查源数据中的非数字字符
使用“数据过滤”组件排除包含非数字的行,或在 JavaScript 中处理:
if (row.getString("field").matches("\\d+")) {
// 转换
} else {
// 置空或处理
}日期类型转换
在字段选择组件中,将源日期类型显式转为 String,再按目标格式解析。
设置空值处理
若为 null 导致异常,在表输出组件中勾选“忽略空值”或“使用默认值”。
针对达梦数据库的补丁:申请 DWS7.1.0_SERVER_20250703_P1。
现象:同步时报 Duplicate entry 主键冲突;目标表出现重复记录。
解决步骤:
源表去重
在源表输入后添加“排序记录”和“去除重复记录”组件,按主键字段排序去重。
使用“插入/更新”组件
配置“用于查询的关键字”(主键),并勾选“更新”和“插入”选项。
检查作业是否重复触发
查看调度历史,确认同一作业未被多次并行执行。可在作业流配置中设置“串行等待”。
若为 CDC 增量同步重复,调整 checkpoint 配置,确保 Exactly-Once 语义。
现象:达梦数据库中字段含特殊字符(如括号、空格)时,建表语句执行失败。
解决步骤:
手动建表
在目标库中提前建好表,字段名加双引号,作业只负责写入。
若为 CSV 导入特殊字符,在文本文件输出组件中配置转义字符和包围符。
现象:源表和目标表时间字段相差几个小时(如 +8 小时或 -8 小时)。
解决步骤:
JDBC URL 添加时区参数
MySQL:serverTimezone=Asia/Shanghai
Oracle:?serverTimezone=Asia/Shanghai(需驱动支持)
统一服务器时区
所有相关服务器(DWS、Dolphin、DI)执行 timedatectl set-timezone Asia/Shanghai。
检查数据库时区设置
MySQL:SELECT @@global.time_zone, @@session.time_zone;,若为 SYSTEM 则需修改配置文件。
在字段选择组件中显式转换
使用 DATE_FORMAT 或 CAST 函数指定时区。
现象:目标表字段有 NOT NULL 约束,但源数据有空值,导致作业报错。
解决步骤:
在作业中添加“空值替换”组件,将空值替换为默认值(如 0、空字符串、当前时间)。
使用 JavaScript 组件判断:
if (row.getString("field") == null) {
row.setValue("field", "默认值");
}修改目标表约束(如允许为空),或提前处理源数据。
| 异常现象 | 章节 |
|---|---|
| 不同引擎结果不一致 | 1 |
| 数字多了 .0 | 2 |
| 中文乱码 | 3 |
| NumberFormatException | 4 |
| 主键冲突 / 重复数据 | 5 |
| 特殊字符建表失败 | 6 |
| 时间字段偏差 | 7 |
| 空值写入报错 | 8 |
注:所有数据库操作前请备份数据。补丁请从 AME+ 平台申请。