mysql時區問題解決幾種方法

2022-07-25 10:36:16 字數 3210 閱讀 3049

問題排查:

mysql資料庫可以通過下面兩個sql檢視時區:

select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
或者:

select timediff(now(), utc_timestamp);
如果是中國標準時間, 會輸出08:00

以下記錄修改mysql時區的幾種方法。

具體:方法一:通過mysql命令列模式下動態修改

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; #立即生效

解決方法0-使用6.0以下版本的jdbc:

降版本,並不推薦;

解決方法1-在jdbc url指定預設時區:

還有一種是在jdbc連線的url後面加上servertimezone=utc或gmt即可,如果指定使用gmt+8時區,需要寫成gmt%2b8,否則可能報解析為空的錯誤。示例如下:

jdbc.url=jdbc:mysql://localhost:3306/demo?servertimezone=utc&characterencoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/demo?servertimezone=gmt%2b8&characterencoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/demo?servertimezone=asia/shanghai&characterencoding=utf-8
增加: 

servertimezone=utc
servertimezone=gmt%2b8
servertimezone=asia/shanghai
解決方法2-在資料庫配置中新增預設時區:

方法1(該方法本人未實驗成功):在my.cnf(linux)或者my.ini(win)配置檔案[mysqld]底下新增: default-time-zone = '+8:00' 然後重啟資料庫伺服器即可。

方法2: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使新時區生效

方法三:如果不方便重啟mysql,又想臨時解決時區問題,可以通過php或其他語言在初始化mysql時初始化mysql時區

這裡,以php為例,在mysql_connect()下使用mysql_query(「set time_zone = 『+8:00′」)。

這樣可以在保證你不重啟的情況下改變時區。但是mysql的某些系統函式還是不能用如:now()。這句,還是不能理解。

mysql時區問題解決幾種方法

問題排查 mysql資料庫可以通過下面兩個sql檢視時區 select timediff now convert tz now session.time zone,00 00 或者 select timediff now utc timestamp 如果是中國標準時間,會輸出08 00 以下記錄修改...

docker 時區問題解決

在dockerfile中新增下列 run cp usr share zoneinfo asia shanghai etc localtime echo asia shanghai etc timezone在dockerfile中新增下列 env lang zh cn.utf 8 run echo e...

MySql中文問題解決方法

1.my.ini mysql配置檔案設定 client default character set gbk mysqld default character set gbk 2.啟動mysql服務建立你的資料庫 3.驗證當前編碼 命令列輸入 mysql u root p 登入你建立的資料庫 conn...