有关 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 相关文章推荐
ZF等常用php框架中存在的问题
Jan 10 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
PHP中phar包的使用教程
Jun 14 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP分享图片的生成方法
Apr 25 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 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
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
解决Python传递中文参数的问题
2015/08/04 Python
Python读写zip压缩文件的方法
2018/08/29 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python为什么会环境变量设置不成功
2020/06/23 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
三分钟演讲稿事例
2014/03/03 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
讲文明倡议书
2015/04/29 职场文书
垂直极限观后感
2015/06/08 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js