有关 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 setcookie() cannot modify header information 的解决方法
Jan 09 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
关于crontab的使用详解
Jun 24 PHP
关于php循环跳出的问题
Jul 01 PHP
php检测文件编码的方法示例
Apr 25 PHP
ThinkPHP视图查询详解
Jun 30 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
详细解读php的命名空间(一)
Feb 21 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 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/07/16 PHP
php写的简易聊天室代码
2011/06/04 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
浅谈php扩展imagick
2014/06/02 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
PHP 实现重载
2021/03/09 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
jupyter 导入csv文件方式
2020/04/21 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
个人教师自我评价范文
2013/12/02 职场文书
房地产广告策划方案
2014/05/15 职场文书
企业环保标语
2014/06/10 职场文书
个人工作决心书
2015/09/22 职场文书