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

出现错误的语句。

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

 

Logo

更多推荐