# mysql修改默认时区
> 进行mysql操作时,发现 `gmt_modified` 字段 ON UPDATE CURRENT\_TIMESTAMP 时,自动取值的时间要晚于系统时间 8 个小时。 一看便知是时区的问题。
## 1. 查看 Mysql 系统时区
```
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
```
`UTC` 是协调世界时\(Universal Time Coordinated\)英文缩写, 北京时间比UTC时间早8小时。
`CST`可以同时代表如下 4 个不同的时区:
Central Standard Time \(USA\) UT-6:00
Central Standard Time \(Australia\) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
因此只需要把Mysql的时区改成 `China Standard Time UT+8:00` 即可
# 2. 修改时区
### 2.1普通安装方式\(未验证\)
```
vim /etc/mysql/my.cnf
# 文件末尾添加时区
default-time-zone = '+08:00'
# 重启服务即可
servicer mysql restart
```
### 2.2 docker安装方式
mysql的docker官方镜像默认没有使用 CST 时区,所以会造成时间不准的问题,
修复办法:
```
docker exec -it mysql_container bash
echo "Asia/Shanghai" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
可以看到类似如下输出:
Current default time zone: 'Asia/Shanghai'
Local time is now: Wed Oct 24 19:44:01 CST 2018.
Universal Time is now: Wed Oct 24 11:44:01 UTC 2018.
exit
docker restart mysql_container
```
重启后就会发现 时间恢复正常了
```
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
```