mysql 時區問題

2022-03-12 01:56:59 字數 3390 閱讀 4736

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...