1.問題源自何處?
之前用的mysql 8.0以上的版本連線時都需要在url後面加 servertimezone=utc
實際上是指出核資料庫的時區為美國。因為我們的資料庫的時區是美國的,而我們連線的時候用的是中國的北京時間,然後比美國早上8個小時,然後呢用的時候就必須指出我們當前用的時間是美國的時間,這樣才能連線上資料庫。
當然是可以的,如果是windows系統,在mysql解壓路徑下的 my.ini 檔案的 [mysqld] 裡面加上 default-time-zone=』+8:00』 ;
改了之後那麼現在就可以直接用 「裸url了」。
/db2" />mysql 使用了utc方式來記錄日誌時間,也就是說這是個世界統一時間,存入mysql中的時間只能是utc時間。mysql的timestamp型別資料,儲存的時候會轉化成utc時間戳,讀取時再從utc轉化為本地時間戳。各地的標準時間為格林威治時間(g.m.t)加上 (+) 或減去 (-) 時區中所標的小時和分鐘數時差。中國是gmt+8.
1.1 檢視mysql當前時間,當前時區
>select
curtime(); #或select now()也可以+--
---------+
| curtime() |+--
---------+
|15:18:10|+
-----------+
> show variables like "%time_zone%";+
------------------+--------+
| variable_name | value |+--
----------------+--------+
| system_time_zone | cst |
| time_zone | system |+--
----------------+--------+
2 rows in
set (0.00
sec)
#time_zone說明mysql使用system的時區,system_time_zone說明system使用cst時區
1.2 修改時區
set global time_zone ='+8:00
'; ##修改mysql全域性時區為北京時間,即我們所在的東8區
set time_zone =
'+8:00
'; ##修改當前會話時區
flush
privileges; #立即生效
解決方法:
方法1、方法2、在jdbc url指定預設時區:
還有一種是在jdbc連線的url後面加上servertimezone=utc或gmt即可,如果指定使用gmt+8時區,需要寫成gmt%2b8,否則可能報解析為空的錯誤。示例如下:
jdbc.url=jdbc:mysql://localhost:3306/demo?servertimezone=utc&characterencoding=utf-
8jdbc.url
=jdbc:mysql://localhost:3306
/demo?servertimezone=gmt%2b8&characterencoding=utf-
8jdbc.url
=jdbc:mysql://localhost:3306
/demo?servertimezone=asia/shanghai&characterencoding=utf-
8
增加:
servertimezone=utc
servertimezone
=gmt%2b8
servertimezone=asia/shanghai
方法3、在資料庫配置中新增預設時區:
sql語句配置全域性時區
mysql> show variables like'%time_zone%';
+------------------+--------+
| variable_name | value |+--
----------------+--------+
| system_time_zone |
|| time_zone | system |+--
----------------+--------+
2 rows in
set, 1 warning (0.00
sec)
#設定當前session時區,即時生效,但僅作用於當前session
mysql
>
set time_zone=
'+8:00';
query ok,
0 rows affected (0.00
sec)
#設定全域性時區,即時生效,作用於所有session
mysql
>
set global time_zone=
'+8:00';
query ok,
0 rows affected (0.00
sec)
mysql
> show variables like
'%time_zone%';
+------------------+--------+
| variable_name | value |+--
----------------+--------+
| system_time_zone |
|| time_zone |
+08:00|+
------------------+--------+
2 rows in
set, 1 warning (0.00
sec)
或者通過修改my.cnf配置檔案來修改時區:
# vim /etc/my.cnf ##在[mysqld
]區域中加上
default
-time_zone =
'+8:00'#
/etc/init.d/mysqld restart ##重啟mysql使新時區生效
我遇到的問題是:在資料庫中select now(); 返回的時間正常,但是jdbc查詢出的時間比實際時間要早8小時:
解決辦法是jdbc連線的url中配置的時區引數:&servertimezone=gmt%2b8
mysql時區問題
一 問題描述 從mysql中取時間欄位時結果會相差14或8個小時 解決方案 在mysql連線字串後加上servertimezone gmt 2b8,表示使用gmt 8北京時間 jdbc mysql ip 3306 seckiluseunicode true characterencoding utf...
mysql時區問題
spring datasource url jdbc mysql localhost 3306 mybatis出現的異常 您必須配置伺服器或jdbc驅動程式 通過servertimezone配置屬性 如果您想要使用時區支援,則需要使用乙個更詳細的時區值。在url後面加上引數?servertimezo...
mysql時區問題
用convert tz轉換時區,你可以用 show nbwww.cppcns.comsp variables nb程式設計客棧sp nbs程式設計客棧p like time zone 得到時區,如果返回的是 system 的話,你可以用 show variables like system time...