无法从列XX转换值“2012-04-05 10:20:00”,以TIMESTAMP(Cannot c

2019-09-16 16:07发布

一个java.sql.SQLException中被抛出时,JDBC试图在MySQL(51年5月1日)转换为有效的datetime到的java.sql.Timestamp。 一个例子是:

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从46年5月1日至51年1月5日

Answer 1:

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

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


Answer 2:

我可以建议:

  1. 尝试DEBUG您的DAO和看着你的Sql Query ,尽量手动输入到MySQL的,你会发现更容易的问题。
  2. 降级你的MySQL到46年5月1日是它出现同样问题或不? 如果是,那么你的表结构的问题。 列已经被别人改变。


文章来源: Cannot convert value '2012-04-05 10:20:00' from column XX to TIMESTAMP