mysql 时区设定_教你如何修改mysql时区的问题
前言
最近公司项目上实现一个新需求,本地已经测通了没问题,放到服务器上就出现毛病了,时间错了。
问题是什么?
需求是让统计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
h.insert_time
预想结果应该为:
但实际SQL结果为:
多出来整整13个小时的数据。
为什么会这样?
一定是时区问题搞的鬼!查看mysql时区
# 查看数据库时区
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | EST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
查看服务器时间
root@Innodev0:/# date
Fri Mar 10 11:05:07 CST 2017
root@Innodev0:/# date -R
Fri, 10 Mar 2017 11:05:10 +0800
得,mysql默认使用的SYSTEM时区,即EST时区,查询相关资料可知,EST时区要比北京时间(东八区)慢13个小时,在数据库中的表现即为:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2017-03-09 21:24:39 |
+---------------------+
1 row in set (0.00 sec)
确实比当前系统的时间慢了整整13个小时。
我应该怎么做?
一:通过sql命令临时修改
# 设置全局时区
mysql> set global time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)
# 设置时区为东八区
mysql> set time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)
# 刷新权限使设置立即生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
在查一次数据库时区
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | EST |
| time_zone | +08:00 |
+------------------+--------+
2 rows in set (0.00 sec)
奥利给,东八区,没毛病!
然后执行sql
OK,已恢复正常!
二:修改my.cnf实现永久修改
vi /etc/mysql/my.cnf
然后在mysqld下边的配置中添加一行:
default-time_zone = '+8:00'
然后重启mysql
service mysql restart
三:代码控制:使用TimeZone工具类
关于TimeZone的具体使用方法不在本文范围内,如需了解请自行百度
import java.util.Date;
import java.util.Calendar;
import java.util.TimeZone;
import java.text.DateFormat;
public class TimeTest{
public static void main(String[] args){
Date date = new Date();
System.out.println(date);
System.out.println(System.getProperty("user.timezone"));
System.out.println(System.getProperty("user.country"));
// 获取所有时区,比如Etc/GMT+12, Etc/GMT+11, Pacific/Midway, Pacific/Niue, Pacific/Pago_Pago...
//String[] ids = TimeZone.getAvailableIDs();
//for (String id : ids) {
// System.out.println(id + ", ");
//}
TimeZone tz;
// 默认时区
tz = TimeZone.getDefault();
System.out.println("======default======");
printDate(tz);
// GMT +09
System.out.println("======GMT +09======");
tz = TimeZone.getTimeZone("GMT+09:00");
printDate(tz);
// GMT +04
System.out.println("======GMT +04======");
tz = TimeZone.getTimeZone("GMT+04:00");
printDate(tz);
// Hongkong
System.out.println("======Hongkong======");
tz = TimeZone.getTimeZone("Hongkong");
printDate(tz);
// Japan
System.out.println("======Japan======");
tz = TimeZone.getTimeZone("Japan");
printDate(tz);
}
private static void printDate(TimeZone tz) {
Date date = new Date();
DateFormat df = DateFormat.getInstance();
df.setTimeZone(tz);
String str = df.format(date);
System.out.println(str + " --- " + tz.getID());
}
}
去服务器上测试:
完成!如果觉得我的文章能够帮助到你,请多多关注、多多分享,各位的支持就是我前进的动力。
慕课网,程序员的梦工厂!
我可以对一个人无限的好,前提是值得。 ——慕冬雪
mysql 时区设定_教你如何修改mysql时区的问题相关推荐
- linux查看mysql用户权限_教您如何查看MySQL用户权限
教您如何查看MySQL用户权限 如果需要查看MySQL用户权限,应该如何实现呢?下面就为您介绍查看MySQL用户权限的方法,并对授予MySQL用户权限的语句进行介绍,供您参考. 查看MySQL用户权限 ...
- 阿里云服务器mysql默认密码_阿里云服务器修改MySQL初始密码---Linux学习笔记
主要方法就是修改 MySQL按照文件下面的my.cnf文件 首先是找到my.cnf文件, # find / -name "my.cnf" # cd /etc 接下来最好是先备份my ...
- 修改mysql表前缀_使用phpMyAdmin批量修改Mysql数据表前缀的方法
多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分.而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍 ...
- mysql 时区设定_设置MySQL默认时区
MySQL默认的时区是UTC时区,比北京时间晚8个小时. 假设日志里面的时间是中午12:00,那么北京时间应该是晚上的8:00点钟. 为方便查看和设置时间,我们要设置MySQL的默认时区,以符合本地使 ...
- linux mysql jdk路径_教大家在如何Centos7系统中安装JDK、Tomcat、Mysql(文末附马哥linux全套视频教......
目录1.jdk的安装 2.tomcat的安装 3.mysql的安装 远程工具:SSH Secure File Transfer Client 远程工具的使用 下载地址:https://pan.baid ...
- c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
现在绝大部分品牌或非品牌有线或无线路由器,其LAN口地址一般使用192.168.1.1或192.168.0.1网段,而使用此默认地址,既不安全,有时也不实用,比如局域网中电脑数过高,超过255台,则此 ...
- 如何修改vue打包的名字_教你如何修改Mac的电脑名字
很多工作的小伙伴,在和同事传输东西的时候总是由于使用的人太多,名字太相似对方总是找不到自己怎么办呢?本章小编就来教大家如何修改Mac电脑的名称. 1.首先,我们可以在终端上查看自己Mac的名称. 2. ...
- 路由器局域网设置_教你如何修改路由器LAN口IP地址的方法
现在绝大部分品牌或非品牌有线或无线路由器,其LAN口地址一般使用192.168.1.1或192.168.0.1网段,而使用此默认地址,既不安全,有时也不实用,比如局域网中电脑数过高,超过255台,则此 ...
- 命令行怎么修改mysql密码_[转]命令行修改MySQL密码
通过MySQL命令行,可以修改mysql数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 ...
最新文章
- python实现选择排序
- com.facebook.imagepipeline.bitmaps.TooManyBitmapsException Fresco使用过程中遇到的坑
- 面试 -- Java基础(一)
- linux 查看mysql运行时间_linux – strace显示从mysql socket读取很长时间 – mysql需要很长时间才能执行查询?...
- VirtualAlloc和VirtualCopy----VirtualFree
- 如何解决 SQL Server 安装程序中的 COM+ 系统配置检查失败问题
- redis——新版复制
- ntp-redhat 同步时间配置
- 【蓝桥杯单片机】DS1302时钟芯片+DS18B20单总线温度传感器(官方驱动源码改写)
- java字符串构造函数的应用_构造函数中的参数0需要找不到类型为'java.lang.String'的bean...
- sql经典题目(1)
- 【洛谷p1012】拼数
- ios 点生成线路 百度地图_iOS百度地图开发之路径规划
- mysql 创建事件_MySQL创建事件(CREATE EVENT)
- 视频截图获取视频某一帧做图片
- 独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
- apple pay 技术_如何在Apple Watch上设置和使用Apple Pay
- B.FRIEND背光防水静音键盘,高剪刀脚键盘GK4
- 关于wifi portal认证--为浏览器添加wifi认证功能
- 大学计算机专业游戏本推荐,选这几款就对了!大学生笔记本电脑盘点推荐
热门文章
- PS中逆光调人像(包含发丝抠图)
- android新消息提醒功能,Android仿微信新消息提示音
- excel 进行二叉树_EXCEL和炒股-如何从海量的数据中提取有用信息
- 3dmip12小时内无法注册_iPhone12如何玩英雄联盟手游?一分钟教你快速注册下载台服lol手游_3DM手游...
- 三十六.用牛顿迭代法求输入的数的平方根
- 周赛(三)_dp_01背包_1423: 贪婪戈尔曼
- 一些正则表达式(js代码验证)
- 数字化转型需要什么样的“发动机”?
- linux脚本数组元素赋值,shell 数组赋值
- go unrecognized relocation (0x2a) in section `.text‘问题