有关 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读注册表
Oct 09 PHP
一个简单的自动发送邮件系统(二)
Oct 09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
用phpmyadmin更改mysql5.0登录密码
Mar 25 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 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 无极分类(递归)实现代码
2010/01/05 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
JS作用域链详解
2017/06/26 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
Python如何读取MySQL数据库表数据
2017/03/11 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python 多线程重启方法
2019/02/18 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
人力资源管理专业自荐书范文
2014/02/10 职场文书
银行授权委托书样本
2014/10/13 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
地道战观后感300字
2015/06/04 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
django如何自定义manage.py管理命令
2021/04/27 Python