在使用Docker搭建的MYSQL环境时发现时区不对,表中有些字段设置为timestamp类型,但库表中的时间都存在时区问题。可以通过show variables like '%time_zone%';命令查看,本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
>show variables like '%time_zone%'; system_time_zone UTC time_zone system
system_time_zone 表示系统使用的时区,time_zone 表示MySQL 采用的是系统的时区。要把时区设置正确,可以有以下三种办法。本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
一是可以在连接MYSQL的时候执行临时修改如下,这种设置只在当前会话中有效:本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
#以下这两种办法功能相同 set time_zone = '+8:00' set session time_zone = '+8:00' select now()
二是可以在连接mysql的时候执行,修改全局时区配置,这种设置在MSYQL重启后失效本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
set global time_zone = '+8:00' select now()本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
三是可以修改mysql的配置文件,永久有效。修改配置文件/etc/my.cnf, 在区域[mysqld]加上:本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
[mysqld] default-time_zone = '+8:00'本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
如果是使用docker生成的mysql容器,一可以修改mysql的配置文件,二可以在生成容器时加上-e TZ=Asia/Shanghai 如下:本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
#docker启动mysql docker run -d -p 3306:3306 --name mysql5.7 \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/logs:/logs \ -v /data/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai mysql本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
对于一些已经启动的MYSQL容器,修改启动命令就不能复用原来的容器,最好的办法还是修改MYSQL的配置文件。最后mysql的timestamp字段是个很好用的字段:本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
在创建新记录和修改现有记录的时候都对这个数据列刷新:
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在创建新记录的时候把这个字段设置为当前时间,以后修改时不刷新:
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
在创建新记录的时候把这个字段设置为0,修改时刷新:
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在创建新记录的时候把这个字段设置为给定值,修改时刷新:
TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP本文地址:http://www.04007.cn/article/775.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/775.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |