有关 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 结果集的分页实现代码
Mar 10 PHP
PHP中其实也可以用方法链
Nov 10 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
stripos函数知识点实例分享
Feb 11 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
模仿OSO的论坛(五)
2006/10/09 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
移动端js图片查看器
2016/11/17 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
Python素数检测实例分析
2015/06/15 Python
python之PyMongo使用总结
2017/05/26 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
python dataframe NaN处理方式
2019/12/26 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
解决c++调用python中文乱码问题
2020/07/29 Python
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
师范生个人推荐信
2013/11/29 职场文书
大学活动总结范文
2014/04/29 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
公司催款律师函
2015/05/27 职场文书
大学生入党自传2015
2015/06/26 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
Go语言基础知识点介绍
2021/07/04 Golang
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android