最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中時區(qū)參數(shù)time_zone解讀

 更新時間:2025年01月22日 15:29:29   作者:Bing@DBA  
MySQL時區(qū)參數(shù)time_zone用于控制系統(tǒng)函數(shù)和字段的DEFAULT CURRENT_TIMESTAMP屬性,修改時區(qū)可能會影響timestamp類型的值,建議在MySQL配置文件中設(shè)置時區(qū)參數(shù),以確保高并發(fā)時的性能,在業(yè)務(wù)中盡量使用datetime類型來存儲時間,因為其時間上限比TIMESTAMP更遠(yuǎn)

前言

MySQL 時區(qū)參數(shù) time_zone 有什么用?修改它有什么影響?

如何設(shè)置該參數(shù),本篇文章會詳細(xì)介紹。

1.時區(qū)參數(shù)影響

time_zone 參數(shù)影響著 MySQL 系統(tǒng)函數(shù)還有字段的 DEFAULT CURRENT_TIMESTAMP 的屬性。

查詢當(dāng)前的時區(qū),+8:00 就代表國內(nèi)的時區(qū):

root@mysql 15:08:  [(none)]>select @@time_zone;
+-------------+
| @@time_zone |
+-------------+
| +08:00      |
+-------------+

查詢當(dāng)前時間:

root@mysql 15:09:  [(none)]>select now();
+---------------------+
| now()               |
+---------------------+
| 2024-12-12 15:09:44 |
+---------------------+

修改時區(qū),為 UTC -8:00 美國時間:

root@mysql 15:09:  [(none)]>set global time_zone = '-08:00';
Query OK, 0 rows affected (0.00 sec)

查詢當(dāng)前時間:

root@mysql 15:09:  [(none)]>select now();
+---------------------+
| now()               |
+---------------------+
| 2024-12-11 23:09:55 |
+---------------------+

另外,需要注意的是 timestamp 類型,會隨著 time_zone 的值產(chǎn)生變化,而 datetime 類型則不會,請看下方演示。

確認(rèn)當(dāng)前 time_zone 參數(shù)值:

select @@time_zone;

+-------------+
| @@time_zone |
+-------------+
| +08:00      |
+-------------+

創(chuàng)建測試表結(jié)構(gòu),兩張表的區(qū)別是 created_at、updated_at 分別為 datetime 和 timestamp 類型。

CREATE TABLE `api_datetime` (
  `id` bigint(64) NOT NULL AUTO_INCREMENT,
  user varchar(10),
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `enabled` bit(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;


CREATE TABLE `api_timestamp` (
  `id` bigint(64) NOT NULL AUTO_INCREMENT,
  user varchar(10),
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `enabled` bit(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

模擬數(shù)據(jù)插入:

insert into api_timestamp(user, enabled) values ('+08:00', b'1');
insert into api_datetime(user, enabled) values ('+08:00', b'1');

查詢表數(shù)據(jù):

root@mysql 16:21:  [test]>select user,created_at, updated_at from api_datetime;
+--------+---------------------+---------------------+
| user   | created_at          | updated_at          |
+--------+---------------------+---------------------+
| +08:00 | 2024-12-12 16:20:34 | 2024-12-12 16:20:34 |
+--------+---------------------+---------------------+
1 row in set (0.00 sec)

root@mysql 16:21:  [test]>select user,created_at, updated_at from api_timestamp;
+--------+---------------------+---------------------+
| user   | created_at          | updated_at          |
+--------+---------------------+---------------------+
| +08:00 | 2024-12-12 16:20:33 | 2024-12-12 16:20:33 |
+--------+---------------------+---------------------+

修改 time_zone 參數(shù)值,為 -8:00:

set global time_zone = '-8:00';

插入測試數(shù)據(jù):

insert into api_timestamp(user, enabled) values ('-08:00', b'1');
insert into api_datetime(user, enabled) values ('-08:00', b'1');
root@mysql 16:25:  [test]>select user,created_at, updated_at from api_datetime;
+--------+---------------------+---------------------+
| user   | created_at          | updated_at          |
+--------+---------------------+---------------------+
| +08:00 | 2024-12-12 16:20:34 | 2024-12-12 16:20:34 |
| -08:00 | 2024-12-12 00:25:52 | 2024-12-12 00:25:52 |
+--------+---------------------+---------------------+
2 rows in set (0.00 sec)

root@mysql 16:25:  [test]>select user,created_at, updated_at from api_timestamp;
+--------+---------------------+---------------------+
| user   | created_at          | updated_at          |
+--------+---------------------+---------------------+
| +08:00 | 2024-12-12 00:20:33 | 2024-12-12 00:20:33 |
| -08:00 | 2024-12-12 00:25:52 | 2024-12-12 00:25:52 |
+--------+---------------------+---------------------+
2 rows in set (0.00 sec)

由上方測試,我們發(fā)現(xiàn)如果字段設(shè)置為 CURRENT_TIMESTAMP 無論是 datetime 還是 timestamp 類型,都會隨 time_zone 參數(shù)影響,不過 datetime 類型的歷史數(shù)據(jù)不會受影響,timestamp 類型的歷史數(shù)據(jù),會隨著 time_zone 的調(diào)整而發(fā)生變化。

2.如何設(shè)置

推薦直接寫在 MySQL 的配置文件中,需要重啟生效。

[mysqld]
default-time-zone='+08:00'

該參數(shù)默認(rèn)為 SYSTEM 表示該參數(shù)值,取自操作系統(tǒng)的時區(qū)設(shè)置。不過還是建議在 MySQL 參數(shù)文件中設(shè)置一下,因為操作系統(tǒng)可能可能不完全歸 DBA 管理,萬一有人突然調(diào)整了,可能會引起線上問題。

另外,如果 time_zone 使用默認(rèn)的 system 值,表示默認(rèn)使用操作系統(tǒng)的時區(qū),則每次通過時區(qū)計算時間時,要調(diào)用操作系統(tǒng)底層系統(tǒng)函數(shù) __tz_convert(),而這個函數(shù)需要額外的加鎖操作,以確保這時操作系統(tǒng)時區(qū)沒有修改。高并發(fā)的時候會導(dǎo)致 TIMESTAMP 類型的表和操作,性能降低。

3.字段類型選擇

業(yè)務(wù)中盡量使用 datetime 類型來存儲時間,除了歷史數(shù)據(jù)不會隨著時區(qū)發(fā)生變化外,還有一個最大值限制問題。

TIMESTAMP 存儲的是 1970-01-01 00:00:00’ 到現(xiàn)在的毫秒數(shù),TIMESTAMP 占用 4 個字節(jié),因此其存儲的時間上限只能到 2038-01-19 03:14:07 已經(jīng)離現(xiàn)在不遠(yuǎn)了,是需要重視的,業(yè)務(wù)又將面臨一次類似千年蟲的問題。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL之修改數(shù)據(jù)表存儲引擎的三種方式

    MySQL之修改數(shù)據(jù)表存儲引擎的三種方式

    這篇文章主要介紹了MySQL之修改數(shù)據(jù)表存儲引擎的三種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SQL和NoSQL之間的區(qū)別總結(jié)

    SQL和NoSQL之間的區(qū)別總結(jié)

    在本篇內(nèi)容里我們給大家精選了關(guān)于SQL和NoSQL之間的區(qū)別的總結(jié)內(nèi)容,對此有需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • insert...on?duplicate?key?update語法詳解

    insert...on?duplicate?key?update語法詳解

    本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • MySQL獲取系統(tǒng)性能和狀態(tài)代碼

    MySQL獲取系統(tǒng)性能和狀態(tài)代碼

    使用MySQL獲取系統(tǒng)性能和狀態(tài)的代碼片段,由此需求的朋友可以參考下,希望對大家有所幫助
    2013-07-07
  • MySQL DBA 常用手冊小結(jié)

    MySQL DBA 常用手冊小結(jié)

    MySQL DBA 常用手冊小結(jié),使用mysql的朋友可以參考下。
    2011-11-11
  • 使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值

    使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值

    MySQL數(shù)據(jù)表結(jié)構(gòu)中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴(kuò)展屬性的‘ID’字段,以確保數(shù)據(jù)表的每一條記錄都可以用這個ID唯一確定
    2011-08-08
  • mysql分區(qū)表的增刪改查的實現(xiàn)示例

    mysql分區(qū)表的增刪改查的實現(xiàn)示例

    增刪查改在數(shù)據(jù)庫中是很常見的操作,本文主要介紹了mysql分區(qū)表的增刪改查的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • windows下mysql中binlog日志分析和數(shù)據(jù)恢復(fù)問題

    windows下mysql中binlog日志分析和數(shù)據(jù)恢復(fù)問題

    這篇文章主要介紹了windows下mysql中binlog日志分析和數(shù)據(jù)恢復(fù)問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理

    MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理,但是mvcc?的實現(xiàn)原理是什么呢?下文我們就來實例說明來mvcc?的實現(xiàn)原理,感興趣的小伙伴可以參考一下
    2022-05-05
  • 淺析Mysql Join語法以及性能優(yōu)化

    淺析Mysql Join語法以及性能優(yōu)化

    在講MySQL的Join語法前還是先回顧一下聯(lián)結(jié)的語法,呵呵,其實連我自己都忘得差不多了,那就大家一起溫習(xí)吧,這里我有個比較簡便的記憶方法,內(nèi)外聯(lián)結(jié)的區(qū)別是內(nèi)聯(lián)結(jié)將去除所有不符合條件的記錄,而外聯(lián)結(jié)則保留其中部分。外左聯(lián)結(jié)與外右聯(lián)結(jié)的區(qū)別在于如果用A左聯(lián)結(jié)B則A中所有記錄都會保留在結(jié)果中,此時B中只有符合聯(lián)結(jié)條件的記錄,而右聯(lián)結(jié)相反,這樣也就不會混淆了。
    2014-05-05

最新評論

疏附县| 布尔津县| 西城区| 搜索| 洛南县| 瑞金市| 龙川县| 曲水县| 改则县| 巫山县| 云龙县| 富平县| 乌拉特后旗| 奉贤区| 静乐县| 龙陵县| 贵溪市| 大洼县| 吉安县| 东乡| 丰镇市| 曲阳县| 商水县| 漾濞| 乃东县| 运城市| 乾安县| 东兴市| 镇平县| 阜平县| 分宜县| 当涂县| 保靖县| 济宁市| 白银市| 石家庄市| 泊头市| 乌拉特中旗| 磐安县| 崇义县| 梁平县|