有关 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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP+MYSQL的文章管理系统(二)
Oct 09 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php将金额数字转化为中文大写
Jul 09 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
PHP框架laravel的.env文件配置教程
Jun 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 异常处理实现代码
2009/03/10 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP 类与构造函数解析
2017/02/06 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
20招让你的Python飞起来!
2016/09/27 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
python爬虫请求头设置代码
2020/07/28 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
大二学生学习个人自我评价
2014/01/19 职场文书
幼儿园安全责任书
2014/04/14 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
校园广播稿精选
2014/10/01 职场文书
北京英文导游词
2015/02/12 职场文书
2016党员入党决心书
2015/09/22 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
新手必备Python开发环境搭建教程
2021/05/28 Python
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js