有关 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 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
php数组编码转换示例详解
Mar 11 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
详解php的socket通信
Aug 11 PHP
教大家制作简单的php日历
Nov 17 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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调用Java对象的方法
2006/10/09 PHP
PHP常用函数小技巧
2008/09/11 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
Highcharts入门之简介
2016/08/02 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
jQuery使用方法
2017/02/04 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
mac 安装python网络请求包requests方法
2018/06/13 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
Python3多线程基础知识点
2019/02/19 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python requests.get带header
2020/05/05 Python
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
校运会入场式解说词
2014/02/10 职场文书
《春晓》教学反思
2014/04/20 职场文书
无传销社区工作方案
2014/05/13 职场文书
洗手间标语
2014/06/23 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
小学运动会宣传稿
2015/07/23 职场文书
学习经验交流会总结
2015/11/02 职场文书
九不准学习心得体会
2016/01/23 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书