日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql6.0设置时区_关于Mysql6.0+的时区错乱问题

發布時間:2023/11/28 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql6.0设置时区_关于Mysql6.0+的时区错乱问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果使用mysql6.0+的JDBC驅動版本的時候,有時候會出現程序時間與數據庫時間相差很多個小時;

1.如果以北京時間為例,相差8個小時的情況一般是你在連接jdbc的url中沒有標明system_time_zone=Asia/ShangHai,一般加上參數就可以解決;

2.如果以北京時間為例,相差13小時或者14個小時,大多數情況是mysql協商會話的時候,Java把服務器的 "CST" 時區 誤以為是美國中部的 "CST" 時區;

關于 CST 時區, 用這個名字的并不是中國一個地區,其代表的含義有多個,所以是一個很混亂的時區;

美國中部時間 Central Standard Time (USA) UTC-06:00

澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30

中國標準時 China Standard Time UTC+08:00

古巴標準時 Cuba Standard Time UTC-04:00

在美國中部時間的CST時區里面,因為實行冬令時和夏令時,夏令時為"3月11日至11月7日 ";

在夏令時的階段,CST 為UTC-05:00, 和北京時間(UTC+08:00)相差13個小時;

在冬令時的階段,CST 為UTC-06:00, 和北京時間(UTC+08:00)相差14個小時;

mysql新版本的時間協商,是在JDBC和mysql建立連接的時候查詢的,在?com.mysql.cj.jdbc.ConnectionImpl?中的?initializePropsFromServer()?獲取服務器時間的時候,如果time_zone為 "SYSTEM",的時候,會取一個mysql服務器的一個時間???system_time_zone?,這個可以在mysql中查到:?show variables like '%time_zone%';

如果得到的是 CST ,Java程序里面就不能判斷這是中國標準時間 CST +0800 ,會誤以為這是美國中部標準時間 CST -0500,所以在轉換相關時間格式的參數(如 timestamp Datetime 等等)時,會出錯.

之前我們說我們用

Asia/Shanghai?時區,也就是UTC +08:00 ,即CST +0800,即說白了,我們服務器上現在是CST+0800 的時區

,java程序誤以為是CST-0500 的時區,所以導致時間相差13個小時,如果是冬令時,可能還會相差14個小時;

我們在使用?PreparedStatement?的參數填充時,如果你的時間字段就會出現此種情況,Timestamp的long類型數據會在??com.mysql.cj.jdbc.PreparedStatement.setTimestamp()?被加上時區做一次處理,所以到時和DateTime一樣的問題;

解決方案:

1.在mysql的配置文件中加入??default-time-zone = '+08:00'

2.登入服務器數據庫,手動指定時區:

set global time_zone = '+08:00';

set time_zone = '+08:00';

3.選擇任何一種方案之后,重啟數據庫;

總結

以上是生活随笔為你收集整理的mysql6.0设置时区_关于Mysql6.0+的时区错乱问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。