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

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

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

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

一、案例演示

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

創(chuàng)建一張測(cè)試表,存儲(chǔ)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');

圖片

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

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

報(bào)錯(cuò)信息為:

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

圖片

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

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

圖片

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

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

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

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

由于timestamp類型是時(shí)區(qū)無關(guān)的,因此時(shí)區(qū)變化時(shí),所展示的數(shù)據(jù)也是會(huì)不一樣,因此在處理涉及時(shí)區(qū)的應(yīng)用時(shí),需謹(jǐn)慎考慮時(shí)差的影響。如不希望變化,可以考慮使用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時(shí)會(huì)得到如下結(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版本),則可以正常獲取對(duì)應(yīng)的時(shí)間戳值。

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

責(zé)任編輯:姜華 來源: 數(shù)據(jù)庫(kù)干貨鋪
相關(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

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

2017-07-05 08:33:42

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

2024-02-22 08:31:26

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

2011-08-04 14:00:01

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

2022-04-11 08:20:36

編程輔助工具GitHubCopilot

2013-06-21 15:01:16

編程開發(fā)

2018-04-20 14:35:18

電費(fèi)電腦收益

2010-01-05 10:28:35

2021-04-01 16:53:24

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

2017-10-18 14:38:32

AWS備份災(zāi)難

2024-07-09 09:08:36

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

2025-01-02 12:51:06

2020-06-19 10:07:36

人工智能人臉識(shí)別技術(shù)

2021-08-31 23:07:07

Windows 10Windows微軟

2021-08-30 15:20:28

Windows 11Windows微軟
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产福利久久 | 久久精品一级 | 成人三级网址 | 天天搞天天操 | av官网在线| 亚洲狠狠 | 亚洲视频在线看 | 国产激情在线观看 | 日韩精品 电影一区 亚洲 | 日韩喷潮| 国产婷婷精品av在线 | 欧美激情综合网 | 色视频www在线播放国产人成 | 中文字幕91| 特一级毛片 | 自拍偷拍第一页 | 久久精品久久久 | 久草新在线 | www日本高清 | 亚洲一区视频在线 | 天天操夜夜操免费视频 | 超碰在线播 | 一本大道久久a久久精二百 欧洲一区二区三区 | 国产精品久久久久久久一区探花 | 欧美在线亚洲 | 国产高清在线精品一区二区三区 | 91精品国产一区二区三区动漫 | av在线免费不卡 | 国产精品久久久久久久久久久久久 | 色综合视频 | 国产一区二区精品在线 | 成人亚洲片 | 中文字幕亚洲一区二区三区 | 999免费观看视频 | 亚洲成人免费在线 | 狠狠色狠狠色综合日日92 | 久久久999免费视频 999久久久久久久久6666 | 亚洲一区二区av | 欧美极品视频 | 亚洲精品一区中文字幕乱码 | 日韩图区 |