com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value的问题

问题原因:不同的数据库日期类型存储范围不同导致的错误。

出现错误的语句。

INSERT INTO t_user (
	user_id,
	create_time,
	birth_day
)
VALUES
	(
		'8d39c875-d007-4c4f-bcab-723b0c1f35d5',
		'2018-08-23 10:18:28.206',
		'1956-10-12 00:00:00.000'
	)

其中create_time和birth_day这两个字段的mysql类型我都设置成timestamp类型。但是执行插入时报错:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1956-10-12 00:00:00' for column 'birth_day' at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3974) ~[mysql-connector-java-5.1.46.jar:5.1.46]
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]

然后我就把这段语句直接在mysql数据中执行,发现数据库中执行没问题。这就很尴尬了啊,猜想可能是我的java实体中字段的类型设定错了。date类型我用的是java.util.Date。觉得并没有问题啊,后来灵光一现发现mysql中对日期类型的存储范围是不同的。

DATE 范围从'1000-01-01' to '9999-12-31'.

DATETIME 范围从'1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

TIMESTAMP 范围从'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

详情请参考:mysql日期字段存储范围官方文档

好了我一看我的sql语句存的是1956年的,用的是TIMESTAMP ,是它就是它,然后我将这个字段的数据库类型改成DATETIME 就好了。问题完美解决。

 

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值