有关 PHP 和 MySQL 时区的一点总结


Posted in PHP onMarch 26, 2008

PHP 脚本端的市区设置可以在 php.ini 下设置 date.timezone 键的值为 'Asia/Shanghai' 即可。但是通常共享虚拟主机本身没有修改 php.ini 权限。这个时候就应该在程序公共部分加入

ini_set('date.timezone','Asia/Shanghai');动态修改 php.ini 的设置。之后可以测试一下时间是否正确:

var_dump(date());如果服务器的本地时间是正确的,那么一般就能解决问题了。附,PHP 5.1 以上提供了专门的函数修改对应的时区:

date_default_timezone_set('Asia/Shanghai');建议使用此函数,因为更通用一些。对应 'Asia/Shanghai' 其他可以使用的大陆时区还有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次为重庆,上海,乌鲁木齐);港台地区可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次为澳门,香港,台北);还有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏调了。

但是,在我修改成功 PHP 端的时区以后发现日期并没有正确的记录下来。这个时候我考虑是否是数据库的问题。果不其然,因为程序插入的函数并没有调用 PHP 的时间,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。这个时候就要考虑是否能修改 MySQL 方面的时区。

参考了 MySQL 的文档,发现一个可行的 SQL 语句为:

SET GLOBAL time_zone = '+8:00'; 其中 '+8:00' 是东八区的表示方法,其他的市区依次类推。而我在数据库模型中插入改语句发现权限不够(该死的虚拟主机提供商)。接下来我调试了很多语句,比如:

DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);显示时区的 SQL 语句:

SHOW VARIABLES LIKE 'system_time_zone'等等。而由于 MySQL 权限的限制并没有彻底的解决方案。我 Google 了下,发现老外这个有一个非常好的解决方案。但是他需要修改每条插入数据的 SQL 语句。这样的方案并不是非常的有效,一旦数据库时区改成正常,那么相应的 SQL 语句又要改回来。

而我考虑既然 PHP 端已经可以正确的解决时间的问题了。MySQL 数据库方面虽然可以使用相应的函数解决,但是如果日后迁移到别的主机环境又要改回来。而相应的字段是一个 TIMESTAMP 类型的,默认的值为 CURRECT_TIMESTAMP,当然是可以指定时间的。

那么我的做法就是让 PHP 插入当前正确的时间,这样虽然程序方面需要做相应的修改。不过日后配置修改起来只要修改一处就可以了。最后插入数据库的时间注意一下格式:

date('Y-m-d H:i:s')这样就可以解决问题了。附,一些非常好的参考资料:

http://www.modwest.com/help/kb6-256.html 
http://topic.csdn.net/t/20060503/07/4728521.html 
http://www.phpchina.com/5173/viewspace_5132.html 
http://www.phpx.com/pth110355.php 
更新:由此 wiLdGoose 兄说他也碰到同样的问题,但是无法解决。结果经过种种的假设和判断以后,到最后发现原来是 Zend Studio 的时区配置问题(我狂汗ing)。看来除去运行环境,开发环境也是需要注意以下的。
今天我也遇到这个问题了,我比你幸运,自己的主机,可以:
SET GLOBAL time_zone = '+8:00'; 
呵呵,你可惜了,不能用 UNIX_TIMESTAMP() 这样的函数了.

PHP 相关文章推荐
鸡肋的PHP单例模式应用详解
Jun 03 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
PHP Session机制简介及用法
Aug 19 PHP
PHP类的反射用法实例
Nov 03 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
php cli配置文件问题分析
Oct 15 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
使用 MySQL Date/Time 类型
Mar 26 #PHP
MySQL修改密码方法总结
Mar 25 #PHP
用phpmyadmin更改mysql5.0登录密码
Mar 25 #PHP
常用的php ADODB使用方法集锦
Mar 25 #PHP
PHP中ADODB类详解
Mar 25 #PHP
php下判断数组中是否存在相同的值array_unique
Mar 25 #PHP
php获取mysql版本的几种方法小结
Mar 25 #PHP
You might like
PHP面试常用算法(推荐)
2016/07/22 PHP
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
requireJS使用指南
2016/04/27 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python 获取div标签中的文字实例
2018/12/20 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
开会迟到检讨书
2014/01/08 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2015公司年度工作总结
2015/05/14 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python