MySQL中DATE,DATETIME和TIMESTAMP类型支持范围

近日在写完项目,在insert数据做测试时,发现了一个小问题。

开发工具中报错如下:

### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1969-12-31 23:59:00' for column 'end_time' at row 1
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1969-12-31 23:59:00' for column 'end_time' at row 1
; SQL []; Data truncation: Incorrect datetime value: '1969-12-31 23:59:00' for column 'end_time' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1969-12-31 23:59:00' for column 'end_time' at row 1] with root cause
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1969-12-31 23:59:00' for column 'end_time' at row 1

(篇幅有限,只截取一部分)

在页面中显示报错为:

(篇幅有限,只截取一部分)

原来是日期字段插入的值不支持,但我insert的语句中有两个日期字段,在格式上没有任何问题啊,一个可以插入,一个却为什么会插入不了呢?排除了其他可能的原因后,怀疑可能是这个值的问题,查阅MySQL官方(https://dev.mysql.com/doc/refman/8.0/en/datetime.html)之后,得了MySQL中DATE,DATETIME和TIMESTAMP类型支持范围。原文如下:

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIMEvalues in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

翻译:

DATE类型用于具有日期部分但没有时间部分的值。MySQL DATE'YYYY-MM-DD'格式检索和显示 值 。支持的范围是'1000-01-01'到 '9999-12-31'

DATETIME类型用于包含日期和时间部分的值。MySQL DATETIME'YYYY-MM-DD HH:MM:SS'格式检索和显示 值。支持的范围是 '1000-01-01 00:00:00''9999-12-31 23:59:59'

TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 TIMESTAMP'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC 范围。

(注意:UTC代表时区。从当前时区转成UTC时区需要减去8小时。)

从官方手册中可看出在MySQL中把日期设置成 TIMESTAMP类型,其值的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC ,超出就会报错

若是使用cmd界面对数据库进行insert操作,TIMESTAMP类型值超出范围,报错如下:

ERROR 1292 (22007): Incorrect datetime value: '1969-12-31 23:59:00' for column 'create_time' at row 1

若使用一些不报错的可视化软件强制对数据库进行TIMESTAMP类型值超出范围的操作,因为数据库要求月和日值有效,而不仅仅分别在1到12和1到31的范围内。禁用严格模式后,将生成无效日期,转换为 '0000-00-00 00:00:00'和警告。

 

猜你喜欢

转载自blog.csdn.net/weixin_42230885/article/details/84423027
今日推荐