日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

是什么導致了,寫入MySQL庫表時間不正確?—— 官網也有Bug!

來源: 責編: 時間:2024-09-10 09:46:53 170觀看
導讀圖片在實際的工作場景中有時候就是一個小小的問題,就可能引發(fā)出一個大大的bug。而且工作這么多年,看到的線上事故,往往也都是這些小的細節(jié)問題,所以學習這些具有實際經驗的細節(jié)非常重要。有些事故隱藏的很深!其實很多時候

圖片圖片5dc28資訊網——每日最新資訊28at.com

在實際的工作場景中有時候就是一個小小的問題,就可能引發(fā)出一個大大的bug。而且工作這么多年,看到的線上事故,往往也都是這些小的細節(jié)問題,所以學習這些具有實際經驗的細節(jié)非常重要。5dc28資訊網——每日最新資訊28at.com

有些事故隱藏的很深!5dc28資訊網——每日最新資訊28at.com

其實很多時候事故也不是一開始就有的,而是隨著需求的迭代,達到某一個條件后觸達到事故的發(fā)生條件了才出現(xiàn)的。就像 MySQL 的時區(qū)配置問題,它既有不同版本 JDBC 連接引擎的不同,又有數據庫設置的時區(qū),還有服務端設置的時區(qū),還包括在使用數據庫配置時指定的時區(qū)。這些條件綜合發(fā)生時才會出現(xiàn)事故。5dc28資訊網——每日最新資訊28at.com

接下來,小傅哥就給大家分享下為啥是 8.0.22 版本才會引發(fā)時區(qū)錯誤問題。5dc28資訊網——每日最新資訊28at.com

一、問題場景

這是一條很普通的SQL語句;5dc28資訊網——每日最新資訊28at.com

<insert id="insert" parameterType="cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO">    INSERT INTO employee(employee_number, employee_name, employee_level, employee_title, create_time, update_time)    VALUES(#{employeeNumber}, #{employeeName}, #{employeeLevel}, #{employeeTitle}, now(), now())</insert>

修改下這條普通的SQL語句;5dc28資訊網——每日最新資訊28at.com

<insert id="insert" parameterType="cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO">    INSERT INTO employee(employee_number, employee_name, employee_level, employee_title, create_time, update_time)    VALUES(#{employeeNumber}, #{employeeName}, #{employeeLevel}, #{employeeTitle}, #{createTime}, now())</insert>

接下來在執(zhí)行插入SQL語句;5dc28資訊網——每日最新資訊28at.com

圖片圖片5dc28資訊網——每日最新資訊28at.com

  • 原本直接使用數據庫語句 now() 的并沒有問題,而改為由程序透傳的時間 createTime 后,日期時間發(fā)生了錯誤。差了8個小時。
  • 通常一般我們操作數據庫的時候,寫入的時間,往往都是 now()。但有時候比如要外部透傳用戶下單時間做本系統(tǒng)做一個返利活動,在什么時間內才返利,要記錄時間。這個時候發(fā)現(xiàn)寫入數據庫的時間就不對了。
  • 因為原本你的系統(tǒng)都是走的數據庫時間,現(xiàn)在突然多了一個來自系統(tǒng)的透傳時間,那么你可能是注意不到的。另外由于本機的開發(fā)環(huán)境與服務器配置不一樣,所以最終直至上線開始跑數據了,才發(fā)現(xiàn)問題。這個就是一般出現(xiàn)事故的原因。

二、排查配置

1. mysql jdbc 版本

<dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.22</version></dependency>
  • 8.0.22 版本,官網提示有bug;https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-23.html

2. 鏈接參數配置

jdbc:mysql://127.0.0.1:3306/road-map?useUnicode=true&characterEncoding=utf8&autoRecnotallow=true&zeroDateTimeBehavior=convertToNull&useSSL=true
  • 注意首次沒有配置時區(qū)。配置時區(qū)需要增加參數;&serverTimeznotallow=Asia/Shanghai

3. mysql time-zone 配置

show variables like '%time_zone%';+------------------+--------+| Variable_name    | Value  |+------------------+--------+| system_time_zone | CST    || time_zone        | SYSTEM |+------------------+--------+
  • 命令修改時區(qū);SET time_zone = 'SYSTEM';
  • 命令修改時區(qū);SET time_zone = '+8:00';
  • 注意CST配置,不是中國時區(qū)。默認是美國中部時間。

美國中部時間 Central Standard Time (USA) UTC-05:00 或 UTC-06:005dc28資訊網——每日最新資訊28at.com

澳大利亞中部時間 Central Standard Time (Australia) UTC+09:305dc28資訊網——每日最新資訊28at.com

中國標準時 China Standard Time UTC+08:005dc28資訊網——每日最新資訊28at.com

古巴標準時 Cuba Standard Time UTC-04:005dc28資訊網——每日最新資訊28at.com

4. linux 服務器時間

[root@lavm-aqhgp9nber ~]# timedatectl      Local time: Sat 2024-08-31 13:57:07 CST  Universal time: Sat 2024-08-31 05:57:07 UTC        RTC time: Sat 2024-08-31 05:57:06       Time zone: Asia/Shanghai (CST, +0800)     NTP enabled: yesNTP synchronized: yes RTC in local TZ: no      DST active: n/a

命令修改時區(qū);sudo timedatectl set-timezone Asia/Shanghai5dc28資訊網——每日最新資訊28at.com

命令修改時區(qū);sudo timedatectl set-timezone America/New_York5dc28資訊網——每日最新資訊28at.com

三、源碼問題 - MySQL JDBC

1. 8.0.22 版本問題

在 8.0.0 ~ 8.0.22 版本中,如果未配置時區(qū),serverTimeznotallow=Asia/Shanghai 則會取服務端時區(qū),所以如果服務端配置的是 CST 時區(qū),則會有問題。調試源碼;5dc28資訊網——每日最新資訊28at.com

com.mysql.cj.protocol.a.NativeProtocol#configureTimezone5dc28資訊網——每日最新資訊28at.com

圖片圖片5dc28資訊網——每日最新資訊28at.com

  • 在 8.0.22 版本中,獲取時區(qū)的方法,如果本地為配置 jdbc 時區(qū),則會獲取服務端時區(qū)。也就是 CST 美國中部時間。
  • 所以,如果你要使用的是 8.0.22 就必須指定時區(qū)。jdbc:mysql://IP:13306/road-map?useUnicode=true&characterEncoding=utf8&autoRecnotallow=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimeznotallow=Asia/Shanghai

2. 8.0.23 + 版本

在 8.0.23 版本以后,如果未配置時區(qū),調整為獲取客戶端時區(qū)。5dc28資訊網——每日最新資訊28at.com

<dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.23</version></dependency>
  • 切換到 8.0.23 版本。

com.mysql.cj.protocol.a.NativeProtocol#configureTimezone5dc28資訊網——每日最新資訊28at.com

圖片圖片5dc28資訊網——每日最新資訊28at.com

  • 在使用 8.0.23 TimeZone.getDefault() 注釋 Gets the default TimeZone of the Java virtual machine. 獲取 Java 虛擬機默認時區(qū)。這個方法也是 Java 本身代碼的方法。
  • 你可以通過 Java Main 函數執(zhí)行 System.*out*.println("Default Time Zone: " + TimeZone.getDefault().getID()); 獲取默認時區(qū)。打印結果為 Default Time Zone: Asia/Shanghai

3. 官網說明

地址:https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-23.html5dc28資訊網——每日最新資訊28at.com

Bugs Fixed5dc28資訊網——每日最新資訊28at.com

After upgrading from Connector/J 5.1 to 8.0, the results of saving and then retrieving DATETIME and TIMESTAMP values became different sometimes. It was because while Connector/J 5.1 does not preserve a time instant by default, Connector/J 8.0.22 and earlier tried to do so by converting a timestamp to the server's session time zone before sending its value to the server. In this release, new mechanisms for controlling timezone conversion has been introduced—see Preserving Time Instants for details. Under this new mechanism, the default behavior of Connector/J 5.1 in this respect is preserved by setting the connection property preserveInstants=false. (Bug #30962953, Bug #98695, Bug #30573281, Bug #95644)

從 Connector/J 5.1 升級到 8.0 后,保存和檢索 DATETIME 和 TIMESTAMP 值的結果有時會有所不同。這是因為,雖然 Connector/J 5.1 默認不保留時間點,但 Connector/J 8.0.22 及更早版本嘗試通過在將時間戳的值發(fā)送到服務器之前將其轉換為服務器的會話時區(qū)來保留時間點。在此版本中,引入了用于控制時區(qū)轉換的新機制 - 有關詳細信息,請參閱保留時間點。在這種新機制下,通過設置連接屬性 retainInstants=false 來保留 Connector/J 5.1 在這方面的默認行為。(錯誤 #30962953、錯誤 #98695、錯誤 #30573281、錯誤 #95644)5dc28資訊網——每日最新資訊28at.com

四、綜上總結

在使用MySQL的時候,確保服務器時區(qū)、MySQL時區(qū)、Java應用鏈接MySQL JDBC的參數配置,都指定到具體的時區(qū)上。MySQL JDBC 使用 8.0.23+ 版本,不要使用 8.0.0 ~ 8.0.22 版本,尤其是5.1升級要升級到 8.0.23 以及往后的版本。5dc28資訊網——每日最新資訊28at.com

正確配置;url: jdbc:mysql://127.0.0.1:3306/road-map?useUnicode=true&characterEncoding=utf8&autoRecnotallow=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimeznotallow=Asia/Shanghai5dc28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-112721-0.html是什么導致了,寫入MySQL庫表時間不正確?—— 官網也有Bug!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 什么是內存溢出,Golang是如何解決內存溢出的

下一篇: 盤點分頁查詢中遇到的坑!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美不卡视频一区发布| 国产亚洲一区二区精品| 亚洲激情视频在线| 国产精品嫩草99a| 蜜臀久久99精品久久久画质超高清| 亚洲一区二区在线播放| 久久成人18免费网站| 韩日午夜在线资源一区二区| 欧美日韩午夜| 欧美凹凸一区二区三区视频| 欧美亚洲视频一区二区| 99v久久综合狠狠综合久久| 黄色一区三区| 欧美在线免费| 欧美波霸影院| 欧美性色视频在线| 亚洲第一天堂av| 国产欧美视频在线观看| 欧美日韩视频在线第一区| 国产毛片精品视频| 亚洲高清视频一区二区| 在线亚洲一区| 亚洲精品看片| 91久久久久久久久| 国产精品久久久久久一区二区三区 | 欧美资源在线| 欧美日韩黄色一区二区| 欧美激情视频一区二区三区在线播放| 久久久一区二区| 欧美在线亚洲| 欧美日韩国产123区| 国产视频亚洲精品| 国产精品亚发布| 国产精品女人网站| 亚洲成人在线| 亚洲精品欧美在线| 亚洲三级视频| 亚洲第一天堂av| 国产精品日韩精品| 亚洲国产成人在线| 亚洲欧美日韩国产中文在线| 欧美视频在线免费看| 欧美成人午夜| 欧美精品色网| 国产精品a久久久久久| 尤妮丝一区二区裸体视频| 亚洲国产日韩精品| 欧美影片第一页| 久久久久久综合| 狂野欧美激情性xxxx欧美| 久久免费观看视频| 欧美—级高清免费播放| 欧美激情精品久久久久久蜜臀| 国产亚洲欧美一区二区| 亚洲一区二区三区免费在线观看 | 亚洲图片欧美午夜| 午夜日韩福利| 久久久免费精品视频| 乱中年女人伦av一区二区| 欧美精品一区二区三区在线看午夜 | 欧美高清视频一区二区三区在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久欧美一区二区| 国产精品国产三级国产aⅴ无密码| 国产精品九九久久久久久久| 国产午夜精品久久久久久久| 在线亚洲精品福利网址导航| 欧美一区二区女人| 欧美午夜不卡在线观看免费| 国产视频不卡| 亚洲电影在线播放| 欧美专区日韩视频| 国产美女精品在线| 亚洲国产综合在线| 久热综合在线亚洲精品| 激情婷婷久久| 久久婷婷国产综合国色天香| 欧美日韩国产成人精品| 国产区二精品视| 亚洲欧美日韩国产一区| 欧美.www| 在线看欧美日韩| 国产精品网曝门| 亚洲精品视频啊美女在线直播| 国产日韩在线看| 在线精品视频免费观看| 亚洲精品中文字幕有码专区| 亚洲视频综合在线| 久久久久久国产精品mv| 欧美日韩精品国产| 国产精品大片wwwwww| 激情欧美亚洲| 久久亚洲国产成人| 亚洲国产天堂久久国产91| 99国产精品私拍| 久久激情视频| 国产精品成人免费精品自在线观看| 夜夜爽99久久国产综合精品女不卡| 欧美一区二区三区四区在线| 国产美女精品免费电影| 亚洲日产国产精品| 久久国产福利| 欧美视频一区| 91久久久久久国产精品| 欧美精品乱码久久久久久按摩| 999亚洲国产精| 欧美成人高清视频| 激情久久五月天| 免费观看久久久4p| 日韩亚洲欧美一区| 欧美肥婆bbw| 欧美日韩在线电影| 国产真实久久| 亚洲一卡久久| 国产欧美日韩另类视频免费观看| 久久精品三级| 国产精品影视天天线| 欧美一区二区在线观看| 狠狠噜噜久久| 欧美精品电影| 亚洲国产精品一区二区www在线| 欧美sm视频| 亚洲桃花岛网站| 欧美精品久久久久久久久老牛影院 | 午夜影院日韩| 欧美午夜视频在线| 欧美一区二区三区四区高清| 亚洲国产成人av| 欧美三级网页| 久久久不卡网国产精品一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲欧美日韩在线一区| 伊人成人在线| 中文亚洲字幕| 国产永久精品大片wwwapp| 国内精品久久久久影院 日本资源| 欧美网站大全在线观看| 亚洲综合欧美| 麻豆久久久9性大片| 99精品视频一区二区三区| 国产日产欧产精品推荐色| 午夜日韩视频| 亚洲精品视频一区二区三区| 欧美紧缚bdsm在线视频| 亚洲欧美日本视频在线观看| 国产精品男女猛烈高潮激情| 久久五月天婷婷| 亚洲午夜电影在线观看| 国产精品av久久久久久麻豆网| 久久日韩粉嫩一区二区三区| 亚洲深夜激情| 亚洲国产第一| 国产欧美一区二区精品仙草咪| 久久精品国产77777蜜臀| 国内精品亚洲| 国产精品mm| 欧美xart系列高清| 久久精品一区二区国产| 亚洲先锋成人| 亚洲三级免费| 在线观看一区| 欧美激情一区二区三区在线 | 一区二区三区精品国产| 欧美中文在线免费| 国产日韩欧美制服另类| 欧美日韩国产经典色站一区二区三区 | 最新成人在线| 欧美调教vk| 久久女同精品一区二区| 亚洲高清毛片| 欧美日韩国产一区二区| aa级大片欧美| 影音先锋中文字幕一区二区| 欧美黄色免费网站| 久久免费偷拍视频| 欧美在线三级| 最新精品在线| 伊人久久婷婷| 狠狠爱综合网| 国产一区在线看| 欧美日韩1区2区| 亚洲欧美中文字幕| 亚洲成人在线观看视频| 欧美日韩1234| 欧美成人精品影院| 麻豆精品视频在线观看视频| 久久成人免费| 欧美一区观看| 日韩亚洲一区二区| 亚洲片国产一区一级在线观看| 在线观看视频一区二区欧美日韩| 欧美区日韩区| 欧美激情中文字幕一区二区| 免费看亚洲片| 亚洲欧美综合v| 亚洲精品国产精品久久清纯直播| 亚洲第一级黄色片| 在线观看欧美一区| 在线成人中文字幕| 亚洲国产精品传媒在线观看 | 欧美一区二区三区免费视频| 欧美一区二区视频97| 久久精品国产99| 亚洲视频在线观看视频|