成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

mysql解決時區(qū)相關(guān)問題

瀏覽:181日期:2023-10-13 12:34:44

前言:

在使用 MySQL 的過程中,你可能會遇到時區(qū)相關(guān)問題,比如說時間顯示錯誤、時區(qū)不是東八區(qū)、程序取得的時間和數(shù)據(jù)庫存儲的時間不一致等等問題。其實,這些問題都與數(shù)據(jù)庫時區(qū)設(shè)置有關(guān),本篇文章將從數(shù)據(jù)庫參數(shù)入手,逐步介紹時區(qū)相關(guān)內(nèi)容。

1.log_timestamps 參數(shù)介紹

首先說明下log_timestamps參數(shù)并不影響時區(qū),只是設(shè)置不同會影響某些日志記錄的時間。該參數(shù)主要是控制 error log、slow log、genera log 日志文件中的顯示時間,但不會影響 general log 和 slow log 寫到表 (mysql.general_log, mysql.slow_log) 中的顯示時間。

log_timestamps 是全局參數(shù),可動態(tài)修改,默認使用 UTC 時區(qū),這樣會使得日志中記錄的時間比北京時間慢 8 個小時,導(dǎo)致查看日志不方便。可以修改為 SYSTEM 變成使用系統(tǒng)時區(qū)。下面簡單測試下該參數(shù)的作用及修改方法:

# 查看參數(shù)值mysql> show global variables like ’log_timestamps’;+----------------+-------+| Variable_name | Value |+----------------+-------+| log_timestamps | UTC |+----------------+-------+1 row in set (0.00 sec)# 產(chǎn)生慢日志mysql> select sleep(10),now();+-----------+---------------------+| sleep(10) | now()|+-----------+---------------------+| 0 | 2020-06-24 17:12:40 |+-----------+---------------------+1 row in set (10.00 sec)# 慢日志文件記錄內(nèi)容 發(fā)現(xiàn)時間是UTC時間# Time: 2020-06-24T09:12:50.555348Z# User@Host: root[root] @ localhost [] Id: 10# Query_time: 10.000354 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1SET timestamp=1592989960;select sleep(10),now();# 修改參數(shù)值 再次測試mysql> set global log_timestamps = SYSTEM;Query OK, 0 rows affected (0.00 sec)mysql> select sleep(10),now();+-----------+---------------------+| sleep(10) | now()|+-----------+---------------------+| 0 | 2020-06-24 17:13:44 |+-----------+---------------------+1 row in set (10.00 sec)# 慢日志文件記錄內(nèi)容 時間是對的# Time: 2020-06-24T17:13:54.514413+08:00# User@Host: root[root] @ localhost [] Id: 10# Query_time: 10.000214 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1SET timestamp=1592990024;select sleep(10),now();

2.time_zone 參數(shù)介紹

time_zone參數(shù)用來設(shè)置每個連接會話的時區(qū),該參數(shù)分為全局和會話級別,可以動態(tài)修改。默認值為 SYSTEM,此時使用的是全局參數(shù) system_time_zone 的值,而 system_time_zone 默認繼承自當(dāng)前系統(tǒng)的時區(qū),即默認情況下 MySQL 時區(qū)和系統(tǒng)時區(qū)相同。

時區(qū)設(shè)置主要影響時區(qū)敏感的時間值的顯示和存儲。包括一些函數(shù)(如 now()、curtime())顯示的值,以及存儲在 TIMESTAMP 類型中的值,但不影響 DATE、TIME 和 DATETIME 列中的值,因為這些數(shù)據(jù)類型在存取時未進行時區(qū)轉(zhuǎn)換,而 TIMESTAMP 類型存入數(shù)據(jù)庫的實際是 UTC 的時間,查詢顯示時會根據(jù)具體的時區(qū)來顯示不同的時間。

下面我們來測試下 time_zone 參數(shù)修改產(chǎn)生的影響:

# 查看linux系統(tǒng)時間及時區(qū)[root@centos ~]# dateSun Jun 28 14:29:10 CST 2020# 查看MySQL當(dāng)前時區(qū)、時間mysql> show global variables like ’%time_zone%’;+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST || time_zone | SYSTEM |+------------------+--------+2 rows in set (0.00 sec)mysql> select now();+---------------------+| now()|+---------------------+| 2020-06-28 14:31:12 |+---------------------+1 row in set (0.00 sec)# 創(chuàng)建測試表、插入部分數(shù)據(jù)mysql> CREATE TABLE `time_zone_test` ( -> `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT ’自增主鍵’, -> `dt_col` datetime DEFAULT NULL COMMENT ’datetime時間’, -> `ts_col` timestamp DEFAULT NULL COMMENT ’timestamp時間’, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’time_zone測試表’;Query OK, 0 rows affected, 1 warning (0.07 sec)mysql> insert into time_zone_test (dt_col,ts_col) values (’2020-06-01 17:30:00’,’2020-06-01 17:30:00’),(now(),now());Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> select * from time_zone_test;+----+---------------------+---------------------+| id | dt_col | ts_col |+----+---------------------+---------------------+| 1 | 2020-06-01 17:30:00 | 2020-06-01 17:30:00 || 2 | 2020-06-28 14:34:55 | 2020-06-28 14:34:55 |+----+---------------------+---------------------+# 改為UTC時區(qū) 并重新連接 發(fā)現(xiàn)timestamp存儲的時間會隨時區(qū)變化mysql> set global time_zone=’+0:00’;Query OK, 0 rows affected (0.00 sec)mysql> set time_zone=’+0:00’;Query OK, 0 rows affected (0.00 sec)mysql> show global variables like ’%time_zone%’;+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST || time_zone | +00:00 |+------------------+--------+2 rows in set (0.00 sec)mysql> select now();+---------------------+| now()|+---------------------+| 2020-06-28 06:36:16 |+---------------------+1 row in set (0.00 sec)mysql> select * from time_zone_test;+----+---------------------+---------------------+| id | dt_col | ts_col |+----+---------------------+---------------------+| 1 | 2020-06-01 17:30:00 | 2020-06-01 09:30:00 || 2 | 2020-06-28 14:34:55 | 2020-06-28 06:34:55 |+----+---------------------+---------------------+2 rows in set (0.00 sec)# 改回東八時區(qū),恢復(fù)正常mysql> set global time_zone=’+8:00’;Query OK, 0 rows affected (0.00 sec)mysql> set time_zone=’+8:00’;Query OK, 0 rows affected (0.00 sec)mysql> show global variables like ’%time_zone%’;+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST || time_zone | +08:00 |+------------------+--------+2 rows in set (0.00 sec)mysql> select now();+---------------------+| now()|+---------------------+| 2020-06-28 14:39:14 |+---------------------+1 row in set (0.00 sec)mysql> select * from time_zone_test;+----+---------------------+---------------------+| id | dt_col | ts_col |+----+---------------------+---------------------+| 1 | 2020-06-01 17:30:00 | 2020-06-01 17:30:00 || 2 | 2020-06-28 14:34:55 | 2020-06-28 14:34:55 |+----+---------------------+---------------------+2 rows in set (0.00 sec)

如果需要永久生效,還需寫入配置文件中。例如將時區(qū)改為東八區(qū),則需要在配置文件[mysqld]部分增加一行:default_time_zone = ’+8:00’。

3.時區(qū)常見問題及如何避免

時區(qū)設(shè)置不妥可能會產(chǎn)生各種問題,下面我們列舉下幾個常見的問題及解決方法:

3.1 MySQL 內(nèi)部時間不是北京時間

遇到這類問題,首先檢查下系統(tǒng)時間及時區(qū)是否正確,然后看下 MySQL 的 time_zone,建議將 time_zone 改為’+8:00’。

3.2 Java 程序存取的時間與數(shù)據(jù)庫中的時間相差 8 小時

出現(xiàn)此問題的原因大概率是程序時區(qū)與數(shù)據(jù)庫時區(qū)不一致導(dǎo)致的。我們可以檢查下兩邊的時區(qū),如果想統(tǒng)一采用北京時間,則可以在 jdbc 連接串中增加 serverTimezone=Asia/Shanghai,并且 MySQL 方面也可以將 time_zone 改為’+8:00’。

3.3 程序時間與數(shù)據(jù)庫時間相差 13 小時或 14 小時

如果說相差 8 小時不夠讓人驚訝,那相差 13 小時可能會讓很多人摸不著頭腦。出現(xiàn)這個問題的原因是 JDBC 與 MySQL 對 “CST” 時區(qū)協(xié)商不一致。因為 CST 時區(qū)是一個很混亂的時區(qū),有四種含義:

美國中部時間 Central Standard Time (USA) UTC-05:00 或 UTC-06:00 澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30 中國標準時 China Standard Time UTC+08:00 古巴標準時 Cuba Standard Time UTC-04:00

MySQL 中,如果 time_zone 為默認的 SYSTEM 值,則時區(qū)會繼承為系統(tǒng)時區(qū) CST,MySQL 內(nèi)部將其認為是 UTC+08:00。而 jdbc 會將 CST 認為是美國中部時間,這就導(dǎo)致會相差 13 小時,如果處在冬令時還會相差 14 個小時。

解決此問題的方法也很簡單,我們可以明確指定 MySQL 數(shù)據(jù)庫的時區(qū),不使用引發(fā)誤解的 CST,可以將 time_zone 改為’+8:00’,同時 jdbc 連接串中也可以增加 serverTimezone=Asia/Shanghai。

3.4 如何避免出現(xiàn)時區(qū)問題

如何避免上述時區(qū)問題,可能你心里也有了些方法,簡要總結(jié)幾點如下:

首先保證系統(tǒng)時區(qū)準確。 jdbc 連接串中指定時區(qū),并與數(shù)據(jù)庫時區(qū)一致。 time_zone 參數(shù)建議設(shè)置為’+8:00’,不使用容易誤解的 CST。 各環(huán)境數(shù)據(jù)庫實例時區(qū)參數(shù)保持相同。

可能有的同學(xué)說了,我們數(shù)據(jù)庫中 time_zone 參數(shù)選擇的是默認的 SYSTEM 值,也沒有發(fā)生程序時間和數(shù)據(jù)庫時間不一致的問題。此時是否需要將 time_zone 改為’+8:00’?在這種情況下還是建議將 time_zone 改為’+8:00’,特別是經(jīng)常查詢 TIMESTAMP 字段,因為當(dāng) time_zone=system 的時候,查詢 timestamp 字段會調(diào)用系統(tǒng)的時區(qū)做時區(qū)轉(zhuǎn)換,有全局鎖__libc_lock_lock 的保護,可能導(dǎo)致線程并發(fā)環(huán)境下系統(tǒng)性能受限。而改為’+8:00’則不會觸發(fā)系統(tǒng)時區(qū)轉(zhuǎn)換,使用 MySQL 自身轉(zhuǎn)換,大大提高了性能。

總結(jié):

讀完本篇文章,你是否對數(shù)據(jù)庫時區(qū)有了更深刻的認識呢。希望這篇文章對你有所幫助,特別是想了解 MySQL 時區(qū)相關(guān)內(nèi)容時,可以拿來多讀讀。如果你遇到過其他時區(qū)相關(guān)問題,歡迎留言討論。

以上就是mysql解決時區(qū)相關(guān)問題的詳細內(nèi)容,更多關(guān)于mysql時區(qū)相關(guān)問題的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲精品伦理在线| 成人久久视频在线观看| 国产91在线|亚洲| 91成人在线免费观看| 亚洲一本大道在线| 在线国产日韩| 日本一区二区成人| 色综合色综合色综合色综合色综合| 日韩视频免费直播| 蜜桃视频免费观看一区| 色八戒一区二区三区| 亚洲一区在线观看免费| 亚洲高清在线| 国产精品福利电影一区二区三区四区| 成人av在线一区二区| 91精品国产一区二区人妖| 久久99精品久久久久久久久久久久 | 26uuu亚洲| 国产精品主播直播| 欧美日本一区二区在线观看| 美女网站色91| 欧美日韩成人在线| 国产麻豆一精品一av一免费| 国产成人精品www牛牛影视| 亚洲精品一区二区在线观看| 国产一区二区高清视频| 中文字幕一区二区三区不卡在线| 中文欧美日韩| 成人美女视频在线看| 天天影视网天天综合色在线播放| 99re热视频精品| 亚洲成人激情自拍| 国产精品视频线看| 中文字幕乱码久久午夜不卡| 久久精品一级爱片| 国产精品久久久一本精品 | 国产露脸91国语对白| 国产精品国产精品国产专区不蜜 | 亚洲男人的天堂在线aⅴ视频| 另类激情亚洲| 欧美日韩hd| 午夜精品影院在线观看| 色婷婷精品大在线视频| 亚洲成人高清在线| 久久人人九九| 美脚の诱脚舐め脚责91 | 国产精品一区二区在线播放| 日韩精品一区二区三区中文精品| 99国产精品国产精品毛片| 中文文精品字幕一区二区| 亚洲午夜在线观看| 午夜影视日本亚洲欧洲精品| 欧美网站一区二区| 成人一区二区三区视频在线观看 | 精东粉嫩av免费一区二区三区| 欧美一区二区精品在线| 99这里都是精品| 国产精品久久三区| 亚洲欧美电影在线观看| 蜜臀av国产精品久久久久| 日韩三级.com| 国产精品videossex久久发布| 亚洲综合丁香婷婷六月香| 欧美系列日韩一区| 成人免费av资源| 国产精品成人免费在线| 色婷婷久久久亚洲一区二区三区| 国产一区二区导航在线播放| 日本一区二区三区四区| 午夜综合激情| 国产成人亚洲精品青草天美| 日本一区二区三区视频视频| 免费h精品视频在线播放| 狠狠狠色丁香婷婷综合激情| 久久精品视频网| 久久精品一区二区国产| 国产福利一区二区三区视频| 国产精品女上位| 老牛影视一区二区三区| gogogo免费视频观看亚洲一| 樱桃视频在线观看一区| 欧美日韩大陆在线| 欧美精品激情| 午夜视频一区在线观看| 日韩精品一区二区三区视频| 亚洲精品日韩久久| 国产在线不卡一卡二卡三卡四卡| 国产精品伦一区| 在线观看一区不卡| 91麻豆高清视频| 日韩av电影免费观看高清完整版在线观看| 欧美mv和日韩mv的网站| 国产欧美一级| 国产成人免费9x9x人网站视频| 中文字幕的久久| 欧美色国产精品| 欧美午夜精品| 精品一区二区三区免费观看| 日韩毛片在线免费观看| 欧美一区二区成人6969| 国产日韩亚洲| 成人午夜免费视频| 亚洲成人资源网| 久久久久久久久岛国免费| 色妹子一区二区| 欧美日韩在线播放一区二区| 看电影不卡的网站| 国产精品久久久久久久岛一牛影视 | 色综合天天综合网天天狠天天| 亚洲一区二区三区三| 日韩精品一区二区三区swag| 亚洲欧美日韩另类精品一区二区三区 | 国产欧美一区二区三区在线看蜜臀 | 日韩成人一区二区三区在线观看| 久久人人超碰精品| 色偷偷成人一区二区三区91| 欧美精品午夜| 国产精品综合一区二区三区| 亚洲午夜免费电影| 国产欧美精品一区二区色综合| 欧美少妇bbb| 亚洲免费播放| av激情综合网| 捆绑变态av一区二区三区| 国产精品成人在线观看| 欧美一区二区高清| 色婷婷精品大在线视频| 亚洲福利久久| 91欧美一区二区| 国产美女娇喘av呻吟久久| 亚洲国产一区二区三区青草影视| 国产亚洲精品免费| 欧美一区二区三区视频| 一本久久综合亚洲鲁鲁五月天| 欧美日韩一区二区三区在线观看免| 国产精品综合av一区二区国产馆| 午夜一区二区三区视频| 中文字幕一区二区三区色视频 | 怡红院av一区二区三区| 久久网这里都是精品| 欧美福利一区二区| 久久综合狠狠| 国产农村妇女精品一二区| 亚洲天堂激情| 欧美伊人影院| 丁香啪啪综合成人亚洲小说| 蜜臀久久99精品久久久画质超高清 | 国产一区二区不卡| 日韩精品色哟哟| 亚洲精品视频在线| 亚洲国产精品99久久久久久久久| 日韩欧美国产电影| 欧美男人的天堂一二区| 久久人人97超碰人人澡爱香蕉| 国产手机视频一区二区| 国产一区二区中文| 欧美黄色精品| 欧美一区免费| 99视频有精品| www.日韩精品| 成人中文字幕合集| 国产精品 日产精品 欧美精品| 久久国产尿小便嘘嘘| 免费久久精品视频| 亚洲成人一区二区| 亚洲乱码国产乱码精品精小说| 国产精品久久久久久久裸模| 国产精品网站导航| 亚洲国产精品成人综合| 国产亚洲成aⅴ人片在线观看| 久久你懂得1024| 精品国产99国产精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久婷婷色综合| 日韩精品影音先锋| 欧美一级高清片| 欧美一卡二卡在线观看| 91精品国产综合久久久久久漫画| 欧美欧美午夜aⅴ在线观看| 欧美日韩一区小说| 欧美日韩在线电影| 欧美精选午夜久久久乱码6080| 欧美日韩精品免费| 91麻豆精品国产91久久久久久久久 | 国产激情一区二区三区四区 | 成人av影院在线| jizzjizzjizz欧美| 91麻豆福利精品推荐| 欧美国内亚洲| 激情成人综合| 国产精品有限公司| 久久精品成人一区二区三区蜜臀| 裸体素人女欧美日韩| 色哟哟国产精品免费观看| 欧美亚洲国产一区在线观看网站| 91久久精品日日躁夜夜躁欧美| 欧美午夜理伦三级在线观看| 欧美卡1卡2卡| 精品捆绑美女sm三区| 国产精品天天看|