mybatis DateTypeHandler 无法将 java Date 转换为 sql TIMESTAMP

mybatis DateTypeHandler cannot convert java Date to sql TIMESTAMP

我想在 MySQL 中将日期存储为 TIMESTAMP。我发现 DateTypeHandler 似乎可以做这个转换。我把它放在我的项目中,但是失败了。

我在 "mapper.xml" 中尝试了以下两种方法,但都失败了。

<insert id="insertUser">
    insert into user (user_id, password, token,
    register_time, user_type, account_type) values (
    #{userId},
    #{password}, #{token}, #{registerTime, jdbcType=TIMESTAMP,
    javaType=java.util.Date, typeHandler=org.apache.ibatis.type.DateTypeHandler},
    #{userType},
    #{accountType}
    )
</insert>

<insert id="insertUser">
    insert into user (user_id, password, token,
    register_time, user_type, account_type) values (
    #{userId},
    #{password}, #{token}, #{registerTime, typeHandler=org.apache.ibatis.type.DateTypeHandler},
    #{userType},
    #{accountType}
    )
</insert>

错误日志如下:

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: 
Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' for column 
'register_time' at row 1
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into user (user_id, password, token,   register_time, user_type, account_type) values (   ?,   ?, ?, ?,   ?,   ?   )
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect 
datetime value: '3892-04-19 00:00:00' for column 'register_time' at row 1
; SQL []; Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' 
for column 'register_time' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: org.springframework.dao.DataIntegrityViolationException: 

MySql TIMESTAMP 类型只能存储 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC 范围内的数据值,并且您尝试在属于这种类型的 register_time 列中插入值“3892-04-19 00:00:00”。这会引发错误:

Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' for column register_time' at row 1

检查这个未来日期是否正确,如果正确,将 jdbcType=TIMESTAMP, 更改为 jdbcType=DATETIME 在您的 mapper.xml 中可以解决问题。 (MySql DATETIME 类型支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。

参考文献:MySql doc