mysql怎么查看时区(记一次修改mysql时区的历程)
mysql怎么查看时区(记一次修改mysql时区的历程)h.insert_time ) `VALUE` h.`NAME` COALESCE ( FORMAT(SUM(h.`VALUE`) / COUNT(1) 0) 0
前言最近公司项目上实现一个新需求,本地已经测通了没问题,放到服务器上就出现毛病了,时间错了。
问题是什么?需求是让统计24个小时(以当前时间为准向前推24个小时)的数据。sql语句大概是这样:
SELECT
h.ID
h.`NAME`
COALESCE (
FORMAT(SUM(h.`VALUE`) / COUNT(1) 0) 0
) `VALUE`
h.insert_time
DATE_SUB(NOW() INTERVAL 23 HOUR)
FROM
rep_health_data h
WHERE
h.`NAME` = 'PM25'
AND h.insert_time >= DATE_FORMAT(
DATE_SUB(NOW() INTERVAL 23 HOUR) '%Y-%m-%d %k'
)
GROUP BY
DATE_FORMAT( h.insert_time '%Y-%m-%d %k' )
ORDER BY
预期的sql结果
但实际SQL结果为:
实际的sql结果
多出来整整13个小时的数据。
为什么会这样?一定是时区问题搞的鬼!查看mysql时区
查看数据库时区
查看服务器时间
查询系统时间和时区
得,mysql默认使用的SYSTEM时区,即EST时区,查询相关资料可知,EST时区要比北京时间(东八区)慢13个小时,在数据库中的表现即为:
获取当前mysql时间
确实比当前系统的时间慢了整整13个小时。
我应该怎么做?一:通过sql命令临时修改
mysql中修改时区
在查一次数据库时区
mysql查看当前时区
奥利给,东八区,没毛病!
然后执行sql
修改时区后的sql结果
OK,已恢复正常!
二:修改my.cnf实现永久修改
vi /etc/mysql/my.cnf
mysql的配置文件
然后在mysqld下边的配置中添加一行:
default-time_zone = ' 8:00'
然后重启mysql
service mysql restart
三:代码控制:使用TimeZone工具类
关于TimeZone的具体使用方法不在本文范围内,如需了解请自行百度
这代码粘贴上来乱七八糟的,还是截图吧
去服务器上测试:
代码执行结果
完成!如果觉得我的文章能够帮助到你,请多多关注、多多分享,各位的支持就是我前进的动力。