有关 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和MySql来与ODBC数据连接
Oct 09 PHP
PHP实现邮件群发的源码
Jun 18 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
Nov 09 PHP
PHP的反射机制实例详解
Mar 29 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP中SESSION过期设置
Mar 09 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP小技巧之函数重载
2014/06/02 PHP
php实现搜索类封装示例
2016/03/31 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
ext jquery 简单比较
2010/04/07 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python 类的特殊成员解析
2018/06/20 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
信号生成及DFT的python实现方式
2020/02/25 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
python 爬虫请求模块requests详解
2020/12/04 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
煤矿班组长的职责
2013/12/25 职场文书
超市创业计划书
2014/04/24 职场文书
国旗下的演讲稿
2014/05/08 职场文书
村级四风对照检查材料
2014/08/24 职场文书
三严三实心得体会范文
2014/10/13 职场文书
新生入学欢迎词
2015/01/26 职场文书