@[TOC](mybatis出现日期转换异常TransientDataAccessResourceException: Error attempting to get column ‘credate’ from result set. Cause: java.sql.SQLException: Invalid length (19) for type TIMESTAMP)

mybatis出现日期转换异常,报错打印如下:

org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'credate' from result set.  Cause: java.sql.SQLException: Invalid length (19) for type TIMESTAMP
; Invalid length (19) for type TIMESTAMP; nested exception is java.sql.SQLException: Invalid length (19) for type TIMESTAMP
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at com.sun.proxy.$Proxy127.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)

先说解决办法:jdbcUrl中加了useServerPrepStmts=true参数,删掉就不会了
在这里插入图片描述

跟入源代码发现:
一、正常的情况下,解析应该是用的MySqlTextValueDecoder类
在这里插入图片描述

二、异常情况下,解析用的是MysqlBinaryValueDecoder类
在这里插入图片描述
进入decideDatetime方法,因为我日期字段的length=19,进入了第一个else-if抛出了异常
在这里插入图片描述
时间关系跟到这里我就没有继续研究了,jdbcUrl删掉useServerPrepStmts=true参数就正常了,如果真的需要这个参数开启预编译,建议继续研究一下其他方法,看看能不能手动设置这个解析用的类

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐