mysql 解決 timestamp 的2038問題


當 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`;

 

參考:https://code-examples.net/zh-CN/q/1eb5ad


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM