有关 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 编写的日历
Oct 09 PHP
Zend Guard一些常见问题解答
Sep 11 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jquery实现弹出层效果实例
2015/05/19 Javascript
常用DOM整理
2015/06/16 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
javascript数组去重小结
2016/03/07 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
python实现音乐下载器
2018/04/15 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Django模板语言 Tags使用详解
2019/09/09 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
社会保险接收函
2014/01/12 职场文书
婚礼主持词开场白
2014/03/13 职场文书
冬季施工防火方案
2014/05/17 职场文书
排查整治工作方案
2014/06/09 职场文书
五一活动标语
2014/06/30 职场文书
银行进社区活动总结
2014/07/07 职场文书
杨善洲观后感
2015/06/04 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS