qq_14890229 2024-11-25 09:56 采纳率: 25%
浏览 17

kettle更新mysql数据库报错

kettle从oracle数据库表输入,更新数据到linux服务器的5.7.29mysql数据库时,提示Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '0000004856AD4ECABF0023125F432651'
更新数据到windows服务器5.7.17版本mysql数据库同样格式的表时,是正常的
ERROR (version 8.3.0.0-371, build 8.3.0.0-371 from 2019-06-11 11.09.08 by buildguy) : Error in step, asking everyone to stop because of:
2024/11/25 09:49:58 - 插入 / 更新.0 - ERROR (version 8.3.0.0-371, build 8.3.0.0-371 from 2019-06-11 11.09.08 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException:
2024/11/25 09:49:58 - 插入 / 更新.0 - Error inserting/updating row
2024/11/25 09:49:58 - 插入 / 更新.0 - Data truncation: Truncated incorrect DOUBLE value: '0000004856AD4ECABF0023125F432651'
2024/11/25 09:49:58 - 插入 / 更新.0 -
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.core.database.Database.insertRow(Database.java:1324)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.core.database.Database.insertRow(Database.java:1248)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.core.database.Database.insertRow(Database.java:1236)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.trans.steps.insertupdate.InsertUpdate.lookupValues(InsertUpdate.java:163)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.trans.steps.insertupdate.InsertUpdate.processRow(InsertUpdate.java:299)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2024/11/25 09:49:58 - 插入 / 更新.0 - at java.lang.Thread.run(Thread.java:750)
2024/11/25 09:49:58 - 插入 / 更新.0 - Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '0000004856AD4ECABF0023125F432651'
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
2024/11/25 09:49:58 - 插入 / 更新.0 - at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
2024/11/25 09:49:58 - 插入 / 更新.0 - at org.pentaho.di.core.database.Database.insertRow(Database.java:1291)
2024/11/25 09:49:58 - 插入 / 更新.0 - ... 6 more

  • 写回答

1条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-11-25 10:18
    关注

    该回答参考ChatGPT,由吾为汝整理提供如若有用,还请题主采纳!

    根据您提供的错误信息,问题似乎出在 Kettle 更新 MySQL 数据库时,尝试将一个字符串('0000004856AD4ECABF0023125F432651')插入到一个期望为 DOUBLE 类型的字段中。这种情况下,MySQL 无法将该字符串转换为 DOUBLE,因此抛出了数据截断的错误。

    以下是一些可能的解决方案和建议:

    1. 检查数据类型

      • 确保 MySQL 数据库中目标字段的数据类型与您要插入的数据类型匹配。如果该字段应该存储字符串,考虑将其数据类型更改为 VARCHAR 或 CHAR。
    2. 数据转换

      • 在 Kettle 中,您可以使用转换步骤(如“转换字段”)将数据类型转换为合适的格式。例如,如果目标字段是字符串类型,确保在插入之前将数据转换为字符串。
    3. 检查数据源

      • 确保从 Oracle 数据库提取的数据格式正确,并且与 MySQL 数据库中的目标字段兼容。
    4. 调试和日志

      • 在 Kettle 中启用详细日志记录,以便更好地理解数据流和转换过程。查看日志中是否有其他相关的错误信息。
    5. 版本差异

      • 注意到您提到在不同版本的 MySQL 中表现不同。可能是由于版本之间的兼容性问题,确保两个 MySQL 版本的配置和数据类型一致。
    6. 使用 SQL 语句

      • 如果 Kettle 的图形界面无法解决问题,可以尝试直接使用 SQL 语句进行插入或更新操作,确保数据类型匹配。

    如果您能提供更多关于数据结构和转换步骤的信息,我可以帮助您更具体地分析问题。请逐步检查这些建议,看看是否能解决您的问题。

    评论

报告相同问题?

问题事件

  • 修改了问题 11月25日
  • 修改了问题 11月25日
  • 创建了问题 11月25日