MySQL 資料庫的時間溢位問題

MySQL 資料庫的時間溢位問題

更新於 發佈於 閱讀時間約 3 分鐘

UNIX 在設計時,用 32 位元為基礎設計,Timestamp (time_t 結構) 順理成章也是 32 位元 (signed int32),從 1970 年開始算,導致它能記錄的時間在 2038 年會溢位變負數。

二進位的 00000000 00000000 00000000 00000001
為 1970/01/01 00:00:00

二進位的 01111111 11111111 11111111 11111111
為 2038/01/19 03:14:07

而在 64bits 的 Linux 中,MySQL 用 timestamp 型態仍然會有這個問題。所以在開發網站,若變成很熱門的網站後,到了 2038 年,跟時間有關的部份就會科科。

timestamp 型態 query 測試驗證:

create table tstest (ts timestamp); 
insert into tstest values ('1895–10–22'); # 日本統治台灣
insert into tstest values ('2047–08–17'); # 貓王的歌曲變公開版權

結果 select * from tstest 時,只會看到二筆 0000–00–00 00:00:00

目前解決方法是用 datetime 型態

create table dttest (dt datetime); 
insert into dttest values ('1895–10–22'); # 日本統治台灣
insert into dttest values ('2047–08–17'); # 貓王的歌曲變公開版權

之後 select * from dttest 時, 會看到剛才二筆資料都正確顯示

MySQL 日後 timestamp 會不會變成 64bits? 問甲骨文的 Lawrence Ellison


本文稍早發佈於 Medium


avatar-img
WILSON PENG的沙龍
2會員
26內容數
留言
avatar-img
留言分享你的想法!
WILSON PENG的沙龍 的其他內容
UTF-8 萬國碼在規格定義時,有建議在文件的開始處,加入位元組順序記號 (BOM, byte-order mark)。但 Plain Text 文件,就是全部都是文字,將它加入檔頭標記,就不是純文字檔案了,所以一般都沒有實作成有 BOM 檔頭的檔案。
要怎麼判斷是奇數還是偶數? 除以 2 有餘數的是奇數,無餘數的是偶數。 有沒有更快的方法?
當使用 Wordpress 架站時,系統至少會有四層漏洞:
UTF-8 萬國碼在規格定義時,有建議在文件的開始處,加入位元組順序記號 (BOM, byte-order mark)。但 Plain Text 文件,就是全部都是文字,將它加入檔頭標記,就不是純文字檔案了,所以一般都沒有實作成有 BOM 檔頭的檔案。
要怎麼判斷是奇數還是偶數? 除以 2 有餘數的是奇數,無餘數的是偶數。 有沒有更快的方法?
當使用 Wordpress 架站時,系統至少會有四層漏洞: