無標題文檔

有关 PHP 和 MySQL 时区的一点总结

由于暂时使用国外的空间,在我发布 Blog 的时候发现时间总是不对。依据我以前编写程序的经验,这是时区的问题。这个问题解决起来并不难,写下我的解决途径以便日后参考。

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')

这样就可以解决问题了。附,一些非常好的参考资料:

  1. http://www.modwest.com/help/kb6-256.html
  2. http://topic.csdn.net/t/20060503/07/4728521.html
  3. http://www.phpchina.com/5173/viewspace_5132.html
  4. http://www.phpx.com/pth110355.php

更新:由此 wiLdGoose 兄说他也碰到同样的问题,但是无法解决。结果经过种种的假设和判断以后,到最后发现原来是 Zend Studio 的时区配置问题(我狂汗ing)。看来除去运行环境,开发环境也是需要注意以下的。

截图有时候能勾起些回忆

今天周末,我把我的移动硬盘带到公司来打算整理下我的文件。无意间当整理我的图片目录的时候发现「尘封」已久的一些系统截图。

这些可以说都是我使用计算机的见证。由于截图众多,我精选了其中的几张有趣的,和大家分享一下。

https://friable.rocks/_/2007_11_10/1194688388.gif

首先是控制台。谁说 Linux 的控制台是黑底白字非常死板的?有了 Bootsplash ,在控制台上可以任意的加上彩色的背景。

https://friable.rocks/_/2007_11_10/1194688347.gif

看来上面的这张图相信大家知道我为什么取名叫 feelinglucky -「手气不错」了吧。是的,当时我运气不错,因为我的老机(MMX 166)由于硬件老旧,所以内核一下子就找到了。我记得当时同寝室的哥们被我气得半死,呵呵。

https://friable.rocks/_/2007_11_10/1194688414.gif

Linux 下我还是喜欢使用 VIM 编写程序,这已经成为我的信仰了(请允许我这样说)。可能你会看见控制台的字体非常奇怪。在 Slackware Linux 下,编辑 /etc/rc.d/rc.fonts 就可以在 Framebuffer 控制台下显示自己想要的字体了。

https://friable.rocks/_/2007_11_10/1194688426.gif

对于中文的支持内核级别的当然是使用 UNICON 了,这个是 TurboLinux 的一个项目。已经很久没有关注这个项目来,自工作了以后我发现我很少「折腾」 Linux 了。我还依稀的记得为了同时打上 UNICON 和 Bootsplash 补丁我 Hack 了不少的时间(当时的 Linux 版本号我记得是 2.4.22)。

https://friable.rocks/_/2007_11_10/1194688442.gif

相信大家还是喜欢 GUI 界面吧,上面这张是 Fvwm 窗口管理器 的截图。我开了一个 xclock 用来显示当前时间,还有一个系统监视工具(名字我一时给忘记了)。界面虽然简单,但是我绑定了很多的快捷键,所以非常好用。

https://friable.rocks/_/2007_11_10/1194688459.gif

工作和娱乐是两不误的。 XMMS 可以说就是我 Linux 下的 Winamp。至于 VIM,它走到哪里都可以用,哪怕是在火星。这图中还有一个叫 MRXVT 的控制台终端,看得出它的亮点就是多标签页吧。

https://friable.rocks/_/2007_11_10/1194688476.gif

除了 FVWM 以外,我偶尔也会使用一下 WindowMaker ,不过这仅仅是换换胃口。截图上显示除了该死的 VIM 外还有几个 DockApp ,开启了一个终端用 MUTT 收信。还有一个 GIMP ,不过版本比较老了,这个是 GTK+ 版本的(起码是两年前的了)。

https://friable.rocks/_/2007_11_10/1194688494.gif

*ix 下可以用 Wine 模拟 Windows 应用程序,也可以用 VMWare 模拟一个虚拟机装一个 Windows 系统。上面的这张就比较有意思了,我是用了一个 DOSBox 模拟 TurboC 2.0 (相信学 C 语言的同学都不陌生)。

https://friable.rocks/_/2007_11_10/1194688508.jpg

生命有时候就在于「折腾」。我很庆幸大学四年的时光能学到很多的东西,在这里我要感谢那台早已淘汰的 MMX 166 笔记本。详细信息兄弟们可以 到这里看看

选择 PostgreSQL, MySQL, Oracle 数据库我之见

最近公司的项目选择了一个全新的数据库系统作为开发平台,我也正在努力的适应在此数据库下的开发是使用。对于很多用户(包括我们程序员)都对于选择何种数据库往往一头雾水。而我以前也经历过此阶段,下面我想谈谈我的看法。

由于本人只是使用过 PostgreSQL, MySQL, Oracle 这三种数据库。这三种数据库也非常有代表性,下面的讨论我只针对这三种数据库而言。有关其他的数据库请大家自行推敲。

版权问题

MySQL 和 PostgreSQL 都是开放的数据库系统。MySQL 的使用协议比较的复杂,从简单的方面看,它是基于 GPL 协议的(为 MySQL 的用户可以得到 MySQLAB 的支持,并使用 MySQL 协议)。PostgreSQL 系统是完全基于 BSD 协议的,这这一点它比 MySQL 更加的「自由」。

GPL 协议要求用户必须公开你修改以后的代码。而 BSD 协议则可以自由的用在商业用途上,无需任何的限制。

而 Oracle 是完全一个商业的系统。它的使用完全是需要付费的,并且不能修改、拷贝其代码和程序甚至文档。

成本

成本相对版权而言。按照上述三种的数据库系统,如果按照费用的计算来讲。Oracle 的支出是最高的,MySQL 相对来说所付的费用稍微少一点。PostgreSQL 则是完全免费的。

支持

对于数据库的后期技术支持是非常重要的。Oracle 数据库有由于是商业产品,所以他的支持自然非常的周到。按照国内的情况,MySQL 和 PostgreSQL 的支持基本上是依靠网络和社区。

吞吐性能

从技术的角度上将,由于三种数据库的应用对象不一样,所体现的性能并不相同。Oracle 适合中大型的系统开发和维护,性能适合海量数据的存储。而 MySQL 则是适合中小型的系统快速的开发和维护,PostgreSQL 则标榜自己是「功能最全的开源数据库系统」,性能自然不俗。

而我从我个人的使用经验来说,打一个形象的比方:Oracle 好比卡车、MySQL 好比皮卡、而 PostgreSQL 好比是客车。

稳定性

对于稳定性能来说,这三种数据库都可以适应 7×24 小时的考验。相对性能来说,我的个人经验是 Oracle 的稳定性是最好的,MySQL 其次,而 PostgreSQL 次之(相对而言,这三种数据库的稳定性都是很优秀的)。

总结

说道这里,你可能对于这三种数据库还是难以抉择。我的个人意见就是,按照实际的项目的需求、规模和成本考虑出发。

Oracle 是大中型项目的首选,而它的支出比较高。相对经济的替换方案是 PostgreSQL(但它需要更多的人工支出)。

对于中小型的项目,MySQL 则完全是可以胜任的。Lamp 系统在开源界的性能是有目共睹的。

而对于程序的开发来说,Oracle 常和 Java(JSP)搭配,MySQL 则一般和 PHP 搭配,PostgreSQL 则可以和多种程序链接。

附:

一家之言,仅作参考之用。下面我摘一下来自 searchoracle.com 的一则经典的回答

PostgreSQL, MySQL, Oracle or other? ===

> QUESTION POSED ON: 26 April 2002

Which should I choose: PostgreSQL, MySQL, Oracle or other? The application is not Web-based, and the database contains 50 tables with the biggest table containing 18 million rows (6GB total). The engine should have:

good backup/restore to/from file service # ability to lock at row level # fast inserting, updating posts

> EXPERT RESPONSE

Which database version do you select? That\'s a tough one. It all depends on a lot of different factors. You\'ve listed a few factors, but not all of them. The biggest one is price. How much can you afford? Oracle will cost much more. And MySQL is free as long as you follow the GPL. You state that you want the ability to lock at the row level. Oracle is one of the best at this, but MySQL with InnoDB is making progress. You also stat that you want fast inserts and updates. For that, I\'d go with Oracle. A properly configured Oracle database will run really nicely.

Other factors to consider are the expected number of concurrent users, the expected data growth, and that application. Like I said, there are lots of factors to consider. In these cases, it\'s not a bad idea to hire a consultant to help in your determination so that your company doesn\'t waste time and money.

我该选择 PostgreSQL, MySQL, Oracle 还是其他?(注:时间为 2002 年 4 月 26 日)

我的项目不是一个 Web 项目,数据库大概有 50 个表最大的可能包含了一千八百万条数据(大概有 6G 的数据)。我该选择什么数据库呢? PostgreSQL、MySQL、Oracle 还是其他?所需的要求必须包含:

良好的备份/恢复系统 # 具有行锁定功能(lock at row level) # 具有良好的性能

专家回答:

到底您该选择哪个系统?这个问题非常的难以回答。这是居于不同的需求而定的。您只是列出了一小部分的要求,并没有全部列出您到底需要什么。最大的问题可能是成本的问题。您的预计支出是多少呢?Oracle 可能需要您更多支出。MySQL 是基于 GPL 协议的,所以它的支出相对少些。您需要有行级锁定功能(lock at row level),我想 Oracle 是最好的权责,但是 MySQL 包含了 InnoDB 以后也具有此良好的性能(译注:自 MySQL 3.2 以后已经具有此功能了)。再次,您需要有良好的性能。老实说,我更倾向于 Oracle。具有良好配置以后的 Oracle 性能会让人非常的满意。

还有其他的需求就是有多少的用户使用您的数据库,数据库的增长幅度,还有就是其上的应用。想我上面所说的,需要考虑的因素有很多。我并不能完全决定您到底使用哪个数据库,我想您或许需要一个顾问评审您具体的应用了以后才可能最终决定下来,这并不需要很多的时间和投入。

这三种数据库近年的趋势图

https://friable.rocks/_/2007_10_29/1193654980.png

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章