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 就好了。问题完美解决。

 

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect date value: '1' for column 'Atime' at row 1 at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) at DMS.AddLater.actionPerformed(AddLater.java:127) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6400) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) at
06-08
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值