问题排查
mysql 数据库可以通过下面两个sql查看时区
select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
或者
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
如果是中国标准时间, 会输出 08:00:00
方法一:通过mysql命令行模式下动态修改
1.1 查看 mysql 当前时间
> select curtime(); #或select now()也可以
+-----------+
| curtime() |
+-----------+
| 02:12:25 |
+-----------+
> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
# 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.3 验证时区
select curtime(); #或select now()也可以
+-----------+
| curtime() |
+-----------+
| 10:12:30 |
+-----------+
> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | +08:00 |
+------------------+--------+
方法2:在数据库配置中添加默认时区
方法1 :通过修改my.cnf配置文件来修改时区
# vim /etc/my.cnf ##在[mysqld]区域中加上
default-time_zone = '+8:00'
# /etc/init.d/mysqld restart ##重启mysql使新时区生效
方法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)
评论区