2012-04-23 29 views
4

当JDBC尝试将MySQL(5.1.51)中的有效日期时间转换为java时,会引发java.sql.SQLException .sql.timestamp。一个例子是:无法将列XX中的值'2012-04-05 10:20:00'转换为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类没有被最近修改。在服务器上的唯一变化最近从46年5月1日升级MySQL到51年5月1日

+0

在升级MySQL之前它工作正常或出现相同的错误?您可以在测试时调用DAO来发布一些代码吗? – Crazenezz 2012-04-23 02:01:20

+0

它确实在升级MySQL之前工作。奇怪的是,这些代码经常在生产服务器上运行。并且异常仅被抛出一次(并且仅在更新之后) – Fred 2012-04-23 02:10:57

+0

到目前为止的任何问题? – Crazenezz 2012-04-26 01:40:27

回答

0

我可以建议:

  1. 尝试DEBUGDAO和看着你Sql Query并尝试手动输入到MySQL的你会发现更容易的问题。
  2. 将您的MySQL降级到5.1.46是否出现同样的问题?如果是,那么你的表结构的问题。某些列已被更改。
1

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

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