mysql中的timestamp類型時間範圍

背景:服務數據入庫的時候報錯 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2050-04-14 13:43:55' for column 'failure_time' at row 1 

鑑於部分入庫時間報錯,首先排除了代碼問題,想到了是不是timestamp時間有範圍限制,於是在數據庫裏也試了試比較大的時間依然報錯:

通過搜索得知:timestamp所能存儲的時間範圍爲:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。並且受時區影響。

具體原因參考mysql官方文檔:https://dev.mysql.com/doc/refman/8.0/en/datetime.html

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 DATETIME values 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.

其他詳細論證文章可參考:https://blog.csdn.net/weter_drop/article/details/89924451

解決方案:將timestamp類型修改爲datatime類型。在我的數據庫中如下:

/*
證書更新表字段修改 支持入庫時間年限增加
*/

-- ----------------------------
-- Table structure for `apply_update`
-- ----------------------------

ALTER TABLE `apply_update`
MODIFY COLUMN `failure_time`  datetime NULL DEFAULT NULL COMMENT '證書失效時間' AFTER `effective_time`;

ALTER TABLE `apply_update`
MODIFY COLUMN `effective_time`  datetime NULL DEFAULT NULL COMMENT '證書生效時間' AFTER `cert_validity`;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章