成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL時間戳2038年災(zāi)難:你的數(shù)據(jù)還能撐過去嗎?

數(shù)據(jù)庫 MySQL
Timestamp類型的一個限制是其存儲范圍,它使用4字節(jié)(32位)整數(shù)來表示秒數(shù),從而導(dǎo)致在2038年01月19日03:14:07之后無法正確存儲時間戳。

Timestamp 類型在MySQL中通常用于存儲日期和時間。然而,Timestamp類型的一個限制是其存儲范圍,它使用4字節(jié)(32位)整數(shù)來表示秒數(shù),從而導(dǎo)致在2038年01月19日03:14:07之后無法正確存儲時間戳。這是因為32位整數(shù)最大可表示的秒數(shù)是2^31 - 1,即2147483647秒,相當于約68年。因此,如果使用了timestamp類型則需要考慮在達到時間范圍前進行相應(yīng)處理。

一、案例演示

1、創(chuàng)建測試表

創(chuàng)建一張測試表,存儲timestamp及 datetime兩種類型。

CREATE TABLE tb1 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
ts TIMESTAMP,
dt DATETIME
);

插入正常的timestamp及datetime類型數(shù)據(jù):均可以寫入成功。

insert into tb1 (ts, dt) values ('2038-01-01','2038-01-01');

圖片

再插入一個超過timestamp范圍的數(shù)據(jù)時,結(jié)果如下:

insert into tb1 (ts, dt) values ('2039-01-01','2039-01-01');

報錯信息為:

ERROR 1292 (22007): Incorrect datetime value: '2039-01-01' for column 'ts' at row 1

圖片

調(diào)整一下:可見datetime類型字段可以正常寫入超過2038年的時間數(shù)據(jù)。

insert into tb1 (ts, dt) values ('2038-01-01','2039-01-01');

圖片

可見,timestamp寫入失敗,而datetime可正常寫入。

2、數(shù)據(jù)范圍

因timestamp為4字節(jié),因此最大值為 2147483647 (同int的最大值),換算為時間則為 2038-01-19 03:14:07(UTC時間),即北京時間2038-01-19 11:14:07。而datetime為8個字節(jié),存儲時間可超過9999年,理論上足夠用。

3、時區(qū)展示問題

由于timestamp類型是時區(qū)無關(guān)的,因此時區(qū)變化時,所展示的數(shù)據(jù)也是會不一樣,因此在處理涉及時區(qū)的應(yīng)用時,需謹慎考慮時差的影響。如不希望變化,可以考慮使用datetime等類型。

mysql> SET SESSION time_znotallow='+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select  * from tb1;
+----+---------------------+---------------------+
| id | ts                  | dt                  |
+----+---------------------+---------------------+
|  1 | 2037-12-31 16:00:00 | 2038-01-01 00:00:00 |
|  2 | 2037-12-31 16:00:00 | 2039-01-01 00:00:00 |
+----+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> SET SESSION time_znotallow='+08:00';
Query OK, 0 rows affected (0.01 sec)
mysql> select  * from tb1;
+----+---------------------+---------------------+
| id | ts                  | dt                  |
+----+---------------------+---------------------+
|  1 | 2038-01-01 00:00:00 | 2038-01-01 00:00:00 |
|  2 | 2038-01-01 00:00:00 | 2039-01-01 00:00:00 |
+----+---------------------+---------------------+
2 rows in set (0.00 sec)

圖片

二、MySQL8.0版本中的改變

MySQL8.0之前,如果使用超過范圍的timestamp時會得到如下結(jié)果:

mysql> select  version();
+---------------+
| version()     |
+---------------+
| 5.7.38-41-log |
+---------------+
1 row in set (0.00 sec)


mysql> SELECT  FROM_UNIXTIME(2147483648);
+---------------------------+
| FROM_UNIXTIME(2147483648) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

圖片

而在MySQL8.0版本中(本例使用8.0.33版本),則可以正常獲取對應(yīng)的時間戳值。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.33-25 |
+-----------+
1 row in set (0.00 sec)


mysql> SELECT UNIX_TIMESTAMP('2039-01-01');
+------------------------------+
| UNIX_TIMESTAMP('2039-01-01') |
+------------------------------+
|                   2177424000 |
+------------------------------+
1 row in set (0.00 sec)

圖片

三、解決方案

如果使用了timestamp類型,且版本較低,可以通過如下方式進行處理。
改為datetime 類型:datetime 類型的范圍更廣,它能夠表示的時間范圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。然而,datetime 類型在存儲上可能會占用更多的空間。
使用 bigint 存儲時間戳:如果你需要更大的時間范圍,并且需要毫秒級別的精度,可以考慮使用 bigint 類型存儲時間戳。將時間戳以毫秒或微秒的形式存儲在 bigint 字段中,可以更靈活地處理大范圍的時間。在這種情況下,你需要在應(yīng)用中負責將時間戳轉(zhuǎn)換為適當?shù)母袷胶蜁r區(qū)。
數(shù)據(jù)庫升級:如果你的 MySQL版本較低,可以考慮進行數(shù)據(jù)庫升級來解決,且MySQL5.7已經(jīng)EOL,建議盡快升級至新版本。

責任編輯:姜華 來源: 數(shù)據(jù)庫干貨鋪
相關(guān)推薦

2024-08-28 13:09:50

2013-01-14 16:19:09

APP生存狀態(tài)

2018-06-29 08:17:53

2021-03-02 16:27:32

大數(shù)據(jù)程序員IT

2020-10-19 15:47:13

人工智能

2017-07-03 11:04:42

存儲災(zāi)難恢復(fù)天氣

2017-07-05 08:33:42

存儲災(zāi)難恢復(fù)

2024-02-22 08:31:26

數(shù)據(jù)恢復(fù)工具MySQL回滾SQL

2011-08-04 14:00:01

MySQL數(shù)據(jù)庫時間戳失序binlog

2022-04-11 08:20:36

編程輔助工具GitHubCopilot

2013-06-21 15:01:16

編程開發(fā)

2018-04-20 14:35:18

電費電腦收益

2021-04-01 16:53:24

數(shù)據(jù)泄漏漏洞網(wǎng)絡(luò)攻擊

2010-01-05 10:28:35

2024-07-09 09:08:36

golang簽名參數(shù)簽名時間

2021-06-09 07:11:08

MySQL時間戳類型

2017-10-18 14:38:32

AWS備份災(zāi)難

2015-11-09 08:57:54

亞馬遜谷歌蘋果

2019-04-17 14:36:38

大數(shù)據(jù)工作996制員工

2020-06-19 10:07:36

人工智能人臉識別技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美黄色大片在线观看 | 免费成人高清在线视频 | 成人激情视频 | 成人亚洲精品久久久久软件 | 一级黄色片免费 | 日本欧美在线视频 | 精品小视频 | 天天视频一区二区三区 | 欧美一区二区三区国产 | 免费在线观看av网站 | 草久久免费视频 | 久久婷婷国产麻豆91 | 久久在线 | 中文天堂在线一区 | 久久久91精品国产一区二区三区 | 视频二区 | 久草新在线 | 亚洲欧美日本在线 | 国产精品99久久久久久久vr | 亚洲精品视频一区二区三区 | 日韩超碰在线 | 欧洲一区二区三区 | 在线成人免费视频 | 欧洲高清转码区一二区 | 精品国产欧美一区二区三区成人 | 国产精久久久久久久妇剪断 | 精品一区二区三区中文字幕 | 久久久久久成人 | 久久久九九九九 | 中文字幕第一页在线 | 亚洲欧美日韩电影 | 国产1区在线 | 国产精品一区二区三区在线 | 精品亚洲永久免费精品 | 99精品一区二区 | 伊人色综合久久天天五月婷 | 狠狠干狠狠操 | 久久久久久色 | 欧美婷婷 | 国产精品久久久久久久久久了 | 国产91av视频在线观看 |