當 timestamp 存儲的時間大於 '2038-01-19 03:14:07'
UTC,mysql就會報錯,
因為這是 mysql自身的問題,也就是說 timestamp是有上限的,超過了,自然會報錯,
具體原因查看官方文檔:https://dev.mysql.com/doc/refman/8.0/en/datetime.html,部分截圖如下:
timestamp 雖然有上限限制,但是它保存的是時間戳,可以不用去考慮時區的問題,如果是需要處理與時區相關的需求,
解決 2038 限制的時候,建議將 timestamp改為整數類型,用來保存時間戳,在程序中再進行轉換(這個方案沒有實施過,僅僅是建議,慎用!!)
如果不需要考慮時區問題,直接用 datatime類型替換 timestamp即可,因為datatime的取值范圍大很多,可看上圖;
替換的思路:
1. 修改原來字段的名字;
ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';
2. 新建一個 datatime類型的字段(新建一列,用來替換原來的);
ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00';
3. 將原來字段列的數據拷貝到新的字段列中;
UPDATE `student` SET `entry_date` = `temp_entry_date`;
4. 刪除原來的列;
ALTER TABLE `student` DROP `temp_entry_date`;
完整sql 如下:(需要注意,原來的 timestamp的默認值,這個也需要加上)
ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00'; ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00'; UPDATE `student` SET `entry_date` = `temp_entry_date`; ALTER TABLE `student` DROP `temp_entry_date`;