有关 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 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
php使用PDO方法详解
Dec 27 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
joomla数据库操作示例代码
Jan 06 PHP
微信红包随机生成算法php版
Jul 21 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 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 9 大缓存技术总结
2015/09/17 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
jquery实现div阴影效果示例代码
2013/09/16 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
python根据文件大小打log日志
2014/10/09 Python
跟老齐学Python之Import 模块
2014/10/13 Python
Python制作CSDN免积分下载器
2015/03/10 Python
理解Python垃圾回收机制
2016/02/12 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
Python字典底层实现原理详解
2019/12/18 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
sklearn+python:线性回归案例
2020/02/24 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
理工科学生的自我评价
2013/12/15 职场文书
大学生学业生涯规划
2014/01/05 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
我的画教学反思
2014/04/28 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
出纳岗位职责范本
2015/03/31 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers