有关 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_xmlhttp 乱码问题解决方法
Aug 07 PHP
openPNE常用方法分享
Nov 29 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
thinkphp常见路径用法分析
Dec 02 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
php常用表单验证类用法实例
Jun 18 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
PHP编程函数安全篇
2013/01/08 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
php中动态调用函数的方法
2015/03/16 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
Python 高级专用类方法的实例详解
2017/09/11 Python
jupyter notebook实现显示行号
2020/04/13 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
质检部岗位职责
2013/11/11 职场文书
人事部主管岗位职责
2013/12/26 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
综合实践活动方案
2014/02/14 职场文书
关于运动会的广播稿
2014/09/22 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫