问题原因:不同的数据库日期类型存储范围不同导致的错误。
出现错误的语句。
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
就好了。问题完美解决。