有关 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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
PHP filesize函数用法浅析
Feb 15 PHP
php intval函数用法总结
Apr 14 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 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结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
获取Javscript执行函数名称的方法
2006/12/22 Javascript
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
pytorch 修改预训练model实例
2020/01/18 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
软件测试英文面试题
2012/10/14 面试题
营业员演讲稿
2013/12/30 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
先进党支部申报材料
2014/12/24 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书