我有个服务器在美国,使用的是PST时间,但是由于可以通过配置.htaccess或者代码中增加其他一些东西,可以保证我在PHP代码中获取的时间是GMT+8.
但同时,服务器使用的数据库在另外一个服务器上,且除了使用phpmyadmin,无法通过其他方法登录或者修改该服务器的配置。经查询,数据库使用的时区是PDT(太平洋夏令时),这样一来,就出现一个很棘手的问题。当数据库字段中有timestamp,并且默认值为CURRENT_TIMESTAMP时,自动生成的时间和我从代码中获取的时间相差16个小时!
解决这个问题思路如下:
在每句MYSQL代码执行前增加一句 set time_zone='+8:00',这样就能保证数据库也能使用GMT+8的时区了。
我最后在ThinkPHP/Lib/Driver/Db/Dbmysql.class.php文件的第60行后增加如下:
//使用北京时间
mysql_query("set time_zone='+8:00';");如是解决问题。如果官方允许在配置文件中增加这么一个数据库时区配置项,则无需修改核心文件,可达到上述目的。
很多人可能会认为直接获取代码中的时间插入数据库也可解决该问题,确实,但是既然数据库又这么一个字段,并且不用额外增加代码,何乐而不为呢?
