一、概述
最近在做MySql生日提交的时候,通过URL访问数据库得到的数据总是比数据库中保存的数据少一天。查阅资料找到以下解决方法,用以记录备忘。
二、修改MySql数据库的默认时区
MySql数据库创建后,默认的时区比东八区少了八个小时。如果Sql语句中使用到MySql的时间的话就会比正常时间少了八个小时。所以需要修改MySql的系统时区,使其显示的时间和我们现在的时间一致。
1)查看mysql系统时间
select now();
2)查看数据库时区
show variables like '%time_zone%';
3)设置时区更改为东八区
set global time_zone = '+8:00';
4)刷新权限
flush privileges;
5)退出后重新登录,即可。
6)修改my.cnf实现永久修改MySQL时区。
cd /etc
vim my.cnf
7)在mysqld下边的配置中添加一行:
default-time_zone = '+8:00'
8)然后重启mysql
service mysql restart
sudo systemctl restart mysqld
三、修改数据库的驱动
若时间还是不对,有可能是驱动的问题,检查下驱动信息,如果连接参数中的字段serverTimezone设置为UTC,将UTC更改为 Asia/Shanghai就可以了。
jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
四、查看和修改Linux服务器上的时区
对于部署在海外的Linux服务器来说,拿到的机器时区和本地并不一样,导致运行在上面的应用也面临时区问题,所以有必要修改Linux服务器上的时区。
1、查看服务器当前的时区
查看当前生效的时区,可以通过date -R
命令来查看当前时间。
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:18:38 +0800
注:+0800,即东8区。
2、设置时区
1)通过tzselect
命令查看时区向导
tzselect
命令看起来很像一个时区选择的工具,但并非如此。事实上tzselect仅仅是一个查看时区表示方式的『向导』程序而已。通过依次询问大洲→国家→城市,最后告诉你如何TZ变量的写法,比如北京时间是:Asia/Shanghai。
2)通过修改TZ变量**,直接修改时区信息
可以通过修改TZ变量,直接修改时区信息,比如:
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:25:15 +0800
[webadmin@host ~]$ sudo export TZ='Asia/Shanghai'
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:25:51 +0800
有Linux经验的小伙伴都知道,不写在文件里的设置更改很难生效一般是会话级的,重新登录会消失。所以,这样直接修改TZ的尿性绝对做不到持久化更改时区的。
正确的方式是到/etc/profile里(或用户的.profile或.bashrc文件),直接export TZ变量为要更改的时区(时区的名字可以用tzselect向导来确定)。
下面展示一波正确的做法:
1)代开文件.bash_profile
sudo vim ~/.bash_profile
2)在文末添加export TZ=‘Asia/Shanghai’
3)使配置生效
source ~/.bash_profile
3)重启相关service或者直接重启服务器
4)通过/etc/localtime文件修改时区
默认情况下情况下,TZ属性是空,这时候是靠**/etc/localtime文件来确定的时区。而此文件通常又是一个到/usr/share/zoneinfo/下各种时区文件的软连接。通过修改/etc/localtime**指向的软连接,进而修改系统的时区。比如下面的方法,将localtime文件设置为了北京时间:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
,
一、概述
最近在做MySql生日提交的时候,通过URL访问数据库得到的数据总是比数据库中保存的数据少一天。查阅资料找到以下解决方法,用以记录备忘。
二、修改MySql数据库的默认时区
MySql数据库创建后,默认的时区比东八区少了八个小时。如果Sql语句中使用到MySql的时间的话就会比正常时间少了八个小时。所以需要修改MySql的系统时区,使其显示的时间和我们现在的时间一致。
1)查看mysql系统时间
select now();
2)查看数据库时区
show variables like '%time_zone%';
3)设置时区更改为东八区
set global time_zone = '+8:00';
4)刷新权限
flush privileges;
5)退出后重新登录,即可。
6)修改my.cnf实现永久修改MySQL时区。
cd /etc
vim my.cnf
7)在mysqld下边的配置中添加一行:
default-time_zone = '+8:00'
8)然后重启mysql
service mysql restart
sudo systemctl restart mysqld
三、修改数据库的驱动
若时间还是不对,有可能是驱动的问题,检查下驱动信息,如果连接参数中的字段serverTimezone设置为UTC,将UTC更改为 Asia/Shanghai就可以了。
jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
四、查看和修改Linux服务器上的时区
对于部署在海外的Linux服务器来说,拿到的机器时区和本地并不一样,导致运行在上面的应用也面临时区问题,所以有必要修改Linux服务器上的时区。
1、查看服务器当前的时区
查看当前生效的时区,可以通过date -R
命令来查看当前时间。
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:18:38 +0800
注:+0800,即东8区。
2、设置时区
1)通过tzselect
命令查看时区向导
tzselect
命令看起来很像一个时区选择的工具,但并非如此。事实上tzselect仅仅是一个查看时区表示方式的『向导』程序而已。通过依次询问大洲→国家→城市,最后告诉你如何TZ变量的写法,比如北京时间是:Asia/Shanghai。
2)通过修改TZ变量**,直接修改时区信息
可以通过修改TZ变量,直接修改时区信息,比如:
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:25:15 +0800
[webadmin@host ~]$ sudo export TZ='Asia/Shanghai'
[webadmin@host ~]$ sudo date -R
Sun, 19 Aug 2018 15:25:51 +0800
有Linux经验的小伙伴都知道,不写在文件里的设置更改很难生效一般是会话级的,重新登录会消失。所以,这样直接修改TZ的尿性绝对做不到持久化更改时区的。
正确的方式是到/etc/profile里(或用户的.profile或.bashrc文件),直接export TZ变量为要更改的时区(时区的名字可以用tzselect向导来确定)。
下面展示一波正确的做法:
1)代开文件.bash_profile
sudo vim ~/.bash_profile
2)在文末添加export TZ=‘Asia/Shanghai’
3)使配置生效
source ~/.bash_profile
3)重启相关service或者直接重启服务器
4)通过/etc/localtime文件修改时区
默认情况下情况下,TZ属性是空,这时候是靠**/etc/localtime文件来确定的时区。而此文件通常又是一个到/usr/share/zoneinfo/下各种时区文件的软连接。通过修改/etc/localtime**指向的软连接,进而修改系统的时区。比如下面的方法,将localtime文件设置为了北京时间:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime