mysql时区的修正(转)

昨 天暴风的技术人员找我要核对充值数据,说是时间对不上;我检查了之后发现二服的数据库的时间有问题,我使用from_unixtime()这个方法查看 1257868800这个时间戳顯示的不是2009-11-11,而是2009-11-10 11:00:00,时间差了十三个小时。而后台显示那里是用from_unixtime()这个方法来显示时间格式的,所以所有的订单数据都对不上他们那 边系统记录的时间。据说是因为装MYSQL的时候的时间不对,导致后来MYSQL的时区就不对了,后来系统虽然把时区改过来了,但是MYSQL的时区还是 在装机的时候的那个时区,显示就错误了。

知道了原因之后就能解决了,上网搜索了一下,找到了解决的方法。现在把我的解决方式记录一下。

先检查MYSQL的时区,打开一台MYSQL时区正确的机器,然后打开有问题的机器,确认是时区错误。

先打开时区正确的机器:进入MYSQL,在命令行输入:mysql -uroot -p****(root的密码),进去之后输入show variables like ‘%time_zone%’;然后回车,得到如下的显示:

+——————+——–+
| Variable_name    | Value  |
+——————+——–+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+——————+——–+
2 rows in set (0.00 sec)

然后再输入select from_unixtime(1257868800);回车,得到如下结果:

+—————————+
| from_unixtime(1257868800) |
+—————————+
| 2009-11-11 00:00:00       |
+—————————+
1 row in set (0.00 sec)

好了,再去有问题有机器上执行相同的操作发现执行show variables like ‘%time_zone%’;得到的结果是:

+——————+——–+
| Variable_name    | Value  |
+——————+——–+
| system_time_zone | EDT    |
| time_zone        | SYSTEM |
+——————+——–+
2 rows in set (0.01 sec)

执行select from_unixtime(1257868800);得到的结果是:

+—————————+
| from_unixtime(1257868800) |
+—————————+
| 2009-11-10 11:00:00       |
+—————————+
1 row in set (0.00 sec)

时间差了十三个小时。怎么样把时区调回我们想 要的呢?虽然网上说可以在命令行下执行set time_zone = ‘+8:00′;之后就设置了时区,但是这样的操作没有对全司有效。只是在执行这个之后再在命令行下执行其它的操作可以得到正确的数据。但是在 phpmyadmin下得到的结果还是错的。所以要修改MYSQL的配置文件来达到修改全局变量的目的。

先去找到mysql的配置文件my.cnf, 一般在/etc/my.cnf下面,可以cd /etc 然后find my.cnf找找,看能不能找到。找到之后就修改它,用VI打开:vi /etc/my.cnf,打开之后查找[mysqld],在VI输入“/”然后输入[mysqld],就定位到[mysqld]所在的位置,在它的下面加 上default-time-zone = ‘+8:00′这一行,然后保存退出,重新启动MYSQL,使时区生效。这个时候再去MYSQL下查看刚才的那两条命令,就会发现时区都设置正确了。

到此,时区不对的问题就解决了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值