Caused by: java.sql.BatchUpdateException: String truncated
at dm.jdbc.driver.DBError.throwBatchUpdateException(DBError.java:684)
at dm.jdbc.a.a.a(DBAccess.java:565)
at dm.jdbc.driver.DmdbPreparedStatement.do_executeLargeBatch(DmdbPreparedStatement.java:503)
at dm.jdbc.driver.DmdbPreparedStatement.do_executeBatch(DmdbPreparedStatement.java:454)
at dm.jdbc.driver.DmdbPreparedStatement.executeBatch(DmdbPreparedStatement.java:1506)
at org.apache.flink.connector.jdbc.internal.executor.SimpleBatchStatementExecutor.executeBatch(SimpleBatchStatementExecutor.java:73)
at org.apache.flink.connector.jdbc.internal.JdbcOutputFormat.attemptFlush(JdbcOutputFormat.java:246)
at org.apache.flink.connector.jdbc.internal.JdbcOutputFormat.flush(JdbcOutputFormat.java:216)
Flink CDC里用jdbc往达梦dm8推数据,老是显示字符被截断是咋回事?有人碰到过嘛?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据报错信息 java.sql.BatchUpdateException: String truncated
,可以判断在使用 Flink CDC 将数据通过 JDBC 写入达梦数据库(DM8)时,发生了字符串被截断的问题。这通常是由于目标表字段的长度不足以容纳写入的数据内容导致的。
结合知识库中的参考资料,类似问题可能与以下因素相关: 1. 字段类型或长度不匹配:源表字段的长度大于目标表字段的定义长度。 2. 字符集差异:源端和目标端的字符集不同,可能导致某些字符在目标端占用更多字节。 3. 数据内容异常:源数据中可能存在超长字符串或特殊字符。
VARCHAR(255)
,而目标表字段为 VARCHAR(100)
,则需要调整目标表字段的长度。ALTER TABLE target_table MODIFY column_name VARCHAR(255);
utf8mb4
字符集时,某些字符(如表情符号)会占用 4 字节,而达梦数据库可能使用 utf8
或其他字符集,导致存储失败。SELECT * FROM v$parameter WHERE name LIKE '%charset%';
utf8mb4
。SUBSTRING
函数截断超长字符串:
SELECT SUBSTRING(column_name, 1, 100) AS column_name FROM source_table;
jdbc.batch.size=1000
jdbc.write.mode=replace
log.level=DEBUG
ALTER SYSTEM SET LOG_LEVEL = 'DEBUG';
通过以上步骤,您可以逐步排查并解决 Flink CDC 写入达梦数据库时出现的字符串截断问题。如果问题仍未解决,建议进一步分析具体的报错日志,并结合知识库中的其他参考资料进行深入排查。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。