日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mysql解決時區相關問題

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

前言:

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

1.log_timestamps 參數介紹

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

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

# 查看參數值mysql> show global variables like ’log_timestamps’;+----------------+-------+| Variable_name | Value |+----------------+-------+| log_timestamps | UTC |+----------------+-------+1 row in set (0.00 sec)# 產生慢日志mysql> select sleep(10),now();+-----------+---------------------+| sleep(10) | now()|+-----------+---------------------+| 0 | 2020-06-24 17:12:40 |+-----------+---------------------+1 row in set (10.00 sec)# 慢日志文件記錄內容 發現時間是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();# 修改參數值 再次測試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)# 慢日志文件記錄內容 時間是對的# 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 參數介紹

time_zone參數用來設置每個連接會話的時區,該參數分為全局和會話級別,可以動態修改。默認值為 SYSTEM,此時使用的是全局參數 system_time_zone 的值,而 system_time_zone 默認繼承自當前系統的時區,即默認情況下 MySQL 時區和系統時區相同。

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

下面我們來測試下 time_zone 參數修改產生的影響:

# 查看linux系統時間及時區[root@centos ~]# dateSun Jun 28 14:29:10 CST 2020# 查看MySQL當前時區、時間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)# 創建測試表、插入部分數據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時區 并重新連接 發現timestamp存儲的時間會隨時區變化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)# 改回東八時區,恢復正常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)

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

3.時區常見問題及如何避免

時區設置不妥可能會產生各種問題,下面我們列舉下幾個常見的問題及解決方法:

3.1 MySQL 內部時間不是北京時間

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

3.2 Java 程序存取的時間與數據庫中的時間相差 8 小時

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

3.3 程序時間與數據庫時間相差 13 小時或 14 小時

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

美國中部時間 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 值,則時區會繼承為系統時區 CST,MySQL 內部將其認為是 UTC+08:00。而 jdbc 會將 CST 認為是美國中部時間,這就導致會相差 13 小時,如果處在冬令時還會相差 14 個小時。

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

3.4 如何避免出現時區問題

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

首先保證系統時區準確。 jdbc 連接串中指定時區,并與數據庫時區一致。 time_zone 參數建議設置為’+8:00’,不使用容易誤解的 CST。 各環境數據庫實例時區參數保持相同。

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

總結:

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

以上就是mysql解決時區相關問題的詳細內容,更多關于mysql時區相關問題的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
婷婷综合激情| 国产亚洲网站| 亚洲不卡视频| 亚洲精品一区二区在线播放∴| 男女精品网站| 蜜臀91精品一区二区三区| 偷拍精品精品一区二区三区| 国产精久久久| 久久精品一区二区国产| 免费在线亚洲欧美| 精品国产一级| 日韩中文在线电影| 日韩高清不卡| 红桃视频欧美| 蜜桃视频免费观看一区| 亚洲精品免费观看| 欧美日韩1区2区3区| 国产精品亚洲人成在99www | 一本色道精品久久一区二区三区| 九九精品调教| 91精品1区| 日韩综合一区二区| 国产精品夜夜夜| 日韩精品1区| 不卡在线一区二区| 中文字幕亚洲精品乱码| 欧美一区自拍| 成人国产精品久久| 国产在线成人| 国产日韩一区二区三区在线播放| 另类欧美日韩国产在线| 日韩专区精品| 首页亚洲欧美制服丝腿| 欧美午夜三级| 国产日韩一区二区三区在线播放| 精品国产乱码久久久| 99精品小视频| 在线看片日韩| 久久免费视频66| 久久久影院免费| 免费在线观看成人| 国产精品久久亚洲不卡| 欧美aa一级| 午夜宅男久久久| 国产另类在线| 久久国产电影| 日韩区欧美区| bbw在线视频| 中文精品在线| 国产日韩欧美一区| 欧美日韩国产观看视频| 国产精品嫩草99av在线| 欧美日本精品| 久久精品影视| 亚洲精品九九| 日韩欧美午夜| 日本成人手机在线| 伊人久久视频| 日本成人中文字幕| 国产精品毛片久久| 日韩影院免费视频| 国产精品一区二区美女视频免费看 | 欧美激情视频一区二区三区免费| 婷婷精品视频| 日本精品久久| 欧美成人国产| 久久精品亚洲一区二区| 伊人久久亚洲热| 国产日产高清欧美一区二区三区| 国产精品久久久久av电视剧| 国产日韩精品视频一区二区三区| 久久久夜精品| 久久av日韩| 中文久久精品| 精品国产网站| 日本亚洲欧美天堂免费| 精品国产精品久久一区免费式 | 国产精品久久久久久久久久齐齐| 国产视频一区在线观看一区免费| 欧美丰满日韩| 国产人成精品一区二区三| 日韩午夜免费| 久久激情婷婷| 精品中文在线| 国产日产一区| 亚洲我射av| 女人天堂亚洲aⅴ在线观看| 精品视频亚洲| 亚洲久久视频| 91久久国产| 精品久久影院| 日韩av影院| 噜噜噜躁狠狠躁狠狠精品视频| 中文字幕在线官网| 国产福利亚洲| 日韩福利视频一区| 好吊日精品视频| 欧美日韩视频免费观看| 精品久久中文| 精品一区二区男人吃奶| 国产精品主播| 欧美日韩午夜电影网| 亚洲精品欧洲| 亚洲在线成人| 自由日本语亚洲人高潮| 亚洲天堂久久| 亚洲四虎影院| 精品国产精品久久一区免费式| 国产精品永久| 日韩黄色在线观看| 中文一区一区三区免费在线观 | 日韩不卡一区二区| 蜜桃视频一区二区| 久久午夜视频| 中文一区一区三区免费在线观| 狠狠干成人综合网| 亚洲午夜一级| 国产综合精品| 亚洲二区在线| 欧美在线亚洲| 麻豆亚洲精品| 亚洲精品乱码久久久久久蜜桃麻豆| 99re国产精品| 亚洲视频二区| 日韩精品视频中文字幕| 日韩精品a在线观看91| 日本成人在线网站| 911亚洲精品| 国产日韩欧美中文在线| 国产精品欧美三级在线观看| 国产欧美日韩一区二区三区四区 | 99国产精品自拍| 国产亚洲一级| 老牛国产精品一区的观看方式| 国产精品社区| 偷拍亚洲精品| 国产精品v亚洲精品v日韩精品| 久久不卡日韩美女| 精品国产乱码久久久久久1区2匹| 色在线中文字幕| 久久国产电影| 综合激情五月婷婷| 欧美一区网站| 国产 日韩 欧美 综合 一区| 亚洲1234区| 免费精品视频| 欧美日韩一区自拍| 国产va在线视频| 亚洲精品888| 日本v片在线高清不卡在线观看| 国产伦乱精品| se01亚洲视频| 日韩制服丝袜先锋影音| 日韩va亚洲va欧美va久久| 国产精品成人3p一区二区三区| 国产成人77亚洲精品www| 亚洲午夜av| 涩涩涩久久久成人精品| 麻豆一区二区三| 国产一区2区| 91精品成人| 日本一区二区中文字幕| 国产精品毛片视频| 中文另类视频| 视频国产精品| 欧美国产美女| 玖玖精品视频| 久久天堂影院| 久久精品官网| 亚洲一二av| 精品久久久久中文字幕小说| 亚洲精品国产偷自在线观看| 日韩精品亚洲专区在线观看| 精品无人区麻豆乱码久久久 | 日韩欧美中文字幕电影| 国产精品日本一区二区三区在线| 久久天堂精品| 欧美午夜网站| 欧美va天堂| 91精品视频一区二区| 成人福利视频| 一区二区三区国产在线| 国产一区二区三区四区二区| 日韩视频中文| 久久久久久网| 日韩欧美精品一区二区综合视频| 欧美xxxx中国| 亚洲精品乱码| 亚洲网站视频| 久久一区欧美| 婷婷精品在线| 久久久久99| 国产精品一区二区三区美女 | 99国产精品视频免费观看一公开| 国产精品嫩模av在线| 亚洲色诱最新| 日韩1区在线| 91亚洲精品在看在线观看高清| 午夜av成人| 精品一区二区三区免费看|