【问题标题】:Cannot convert value '2012-04-05 10:20:00' from column XX to TIMESTAMP无法将值“2012-04-05 10:20:00”从 XX 列转换为 TIMESTAMP
【发布时间】:2012-04-23 01:47:42
【问题描述】:

当 JDBC 尝试将 MySQL (5.1.51) 中的有效日期时间转换为 java.sql.timestamp 时,将引发 java.sql.SQLException。一个例子是:

java.sql.SQLException: Cannot convert value '2012-04-05 10:20:00' from column 40 to TIMESTAMP

这是第一次

Versions:
MySQL: 5.1.51
J/Connector: 5.1.19
Column Definition:  DATETIME
Java Type:   java.sql.Timestamp

堆栈跟踪:

Cannot convert value '2012-04-05 10:20:00' from column 40 to TIMESTAMP.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1335)
    at com.mysql.jdbc.BufferRow.getTimestampFast(BufferRow.java:576)
    at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:6466)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6066)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6104)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)

最近没有修改 DAO 类。服务器上最近的唯一变化是将 MySQL 从 5.1.46 升级到 5.1.51

【问题讨论】:

  • 在升级 MySQL 之前它是否正常工作或发生同样的错误?测试调用DAO的时候可以贴一些代码吗?
  • 在升级 MySQL 之前它确实可以工作。奇怪的是,这段代码经常在生产服务器上运行。并且异常只被抛出了一次(并且只在更新之后)
  • 我在使用 MySQL v5.6.16 时遇到了同样的问题。我读到人们将?zeroDateTimeBehavior=convertToNull&useUnicode=true&useFastDateParsing=false&characterEncoding=UTF-8 添加到他们的 JDBC 连接字符串中。

标签: java mysql datetime jdbc


【解决方案1】:

您可以通过将 useFastDateParsing=false 添加到 JDBC 连接 URL 来禁用快速日期解析。例如以下可能会解决您的问题:

jdbc:mysql://yourHostName:3306/yourDbName?useUnicode=true&useFastDateParsing=false&characterEncoding=UTF-8

【讨论】:

  • 这可以解决问题,但由于某种原因,我的本地 jboss 服务器不理解 & 符号并吐出The reference to entity "useFastDateParsing" must end with the ';' delimiter. 当我使用 &amp 时没问题; 如下?zeroDateTimeBehavior=convertToNull&useFastDateParsing=false.
【解决方案2】:

我可以建议:

  1. 尝试DEBUG你的DAO并查看你的Sql Query并尝试在MySQL中输入手册,你会发现问题更容易。
  2. 将您的 MySQL 降级到 5.1.46 是否会出现同样的问题?如果是,那么您的表结构有问题。列已被某人更改。

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2023-03-07
    相关资源
    最近更新 更多