欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

select @@time_zone;

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

創(chuàng)建測(cè)試表結(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)建時(shí)間',
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
  `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)建時(shí)間',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
  `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';

插入測(cè)試數(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)

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

2.如何設(shè)置

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

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

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

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

3.字段類型選擇

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

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

總結(jié)

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

相關(guān)文章

  • MySQL字符集中文亂碼解析

    MySQL字符集中文亂碼解析

    這篇文章主要給大家解析了MySQL字符集中文亂碼的問題,文章通過代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • Mysq詳細(xì)講解如何解決庫存并發(fā)問題

    Mysq詳細(xì)講解如何解決庫存并發(fā)問題

    這篇文章主要為大家詳細(xì)介紹了如何使用Mysq解決庫存并發(fā)問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Mysql5.7.14 linux版密碼忘記完美解決辦法

    Mysql5.7.14 linux版密碼忘記完美解決辦法

    這篇文章主要介紹了Mysql5.7.14 linux版密碼忘記完美解決辦法,需要的朋友可以參考下
    2017-08-08
  • Mysql自帶profiling性能分析工具使用分享

    Mysql自帶profiling性能分析工具使用分享

    Mysql自帶profiling性能分析工具使用分享,需要的朋友可以參考下
    2012-11-11
  • mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • MySQL 5.7升級(jí)8.0報(bào)異常:ONLY_FULL_GROUP_BY的問題解決

    MySQL 5.7升級(jí)8.0報(bào)異常:ONLY_FULL_GROUP_BY的問題解決

    本文主要介紹了MySQL 5.7升級(jí)8.0報(bào)異常的問題解決,主要是ONLY_FULL_GROUP_BY,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 詳解Mysql日期格式并聚合統(tǒng)計(jì)示例

    詳解Mysql日期格式并聚合統(tǒng)計(jì)示例

    這篇文章主要為大家介紹了Mysql日期格式并聚合統(tǒng)計(jì)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • MySQL普通索引與唯一索引的使用與區(qū)別

    MySQL普通索引與唯一索引的使用與區(qū)別

    本文主要介紹了MySQL普通索引與唯一索引的使用與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL特殊函數(shù)使用技巧梳理

    MySQL特殊函數(shù)使用技巧梳理

    MySQL提供了各種特殊函數(shù),它們可以幫助管理者查詢復(fù)雜的數(shù)據(jù),資料庫包括字符串函數(shù),數(shù)學(xué)函數(shù),日期函數(shù),程序函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于MySQL特殊函數(shù)使用技巧的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • mysql 數(shù)據(jù)庫鏈接狀態(tài)確認(rèn)實(shí)驗(yàn)(推薦)

    mysql 數(shù)據(jù)庫鏈接狀態(tài)確認(rèn)實(shí)驗(yàn)(推薦)

    這篇文章主要介紹了mysql 數(shù)據(jù)庫鏈接狀態(tài)確認(rèn)實(shí)驗(yàn),通過本文我選擇 了三種方案給大家詳細(xì)講解,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評(píng)論