有关 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生成自己的LOG文件
Oct 09 PHP
用php获取远程图片并把它保存到本地的代码
Apr 07 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
PHP的博客ping服务代码
Feb 04 PHP
redis 队列操作的例子(php)
Apr 12 PHP
深入PHP autoload机制的详解
Jun 09 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
php redis setnx分布式锁简单原理解析
Oct 23 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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
Win下如何安装PHP的APC拓展
2013/08/07 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
PHP数组实例详解
2016/06/26 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
python快速查找算法应用实例
2014/09/26 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python元字符的用法实例解析
2018/01/17 Python
Python对切片命名的实现方法
2018/10/16 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
Python实现SMTP邮件发送
2020/06/16 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
weblogic面试题
2016/03/07 面试题
大学生村官任职感言
2014/01/09 职场文书
结婚邀请函范文
2014/01/14 职场文书
大学运动会通讯稿
2014/01/28 职场文书
小学开学标语
2014/07/01 职场文书
邀请函范文
2015/02/02 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电