日期:2014-05-16 浏览次数:20715 次
????? MySQL经常被人们用来建设网络数据库。这时候,MySQL服务器和WEB服务器或都运行在同一台计算机上,或者运行在不同的计算机上。但无论如何都是运行在同一个地理时区里。对数据库用户来说,即使他们散布在世界各地,即使他们在链接和访问MySQL服务器时需要调用一些PHP或java程序,那些程序也只能运行在与MySQ服务器同处一个时区的那台配套的WEB服务器上。用户不必关心时区管理的问题。
????? 可是,如果是一名WEB应用程序开发者,就不能不考虑MySQL服务器的时区管理问题,就不能不考虑怎么样才能用好MySQL服务器的时区管理能力问题:应该让WEB用户有机会看到他们自己的当地时间。通过这里的学习,大家想必已经知道这其实是一件很简单的事情:在WEB用户与MySQL服务器建立链接后执行一条必要命令 “SET time_zon=...”的命令;这条SQL命令已足以让WEB用户看到他自己的时间。
??? 在下面的例子里,MySQ服务器运行在CET时区里,所以让SQL函数now()第一返回的是CET时间,把time_zone变量调整为GMT-8时区后,now()函数返回的将是洛杉机的时区上的时间。
select now(); #结果 2005-12-07 16:29:54 SET time_zone='-8:00'; #或者是:SET @@session.time_zone='-8:00' select now(); #结果 2005-12-07 8:29:54
?不同时区的自动转换和计算
下表列出会受到时区设置影响的MySQL数据类型和函数。
功能 | 会根据时区设置做出自动调整 | 不会根据时区设置作出自动调整 |
存储日期、时间数据确定当前时间 |
TIMESTAMP数据列; NOW()、CURDATE()、CURRENT_XXX()、LOCALTIME()、SYSDATE()等函数 |
DATE、TIME和DATETIME数据列; UNIX_TIMESTAMP()、UTC_DATE()、UTC_TIME()、UTC_TIMESTAMP()等函数 |
DATETIME与UNIX时间戳之间的相互转换;日期/时间的计算与输出格式 | UNIX_TIMESTAMP(datetime)、 FROM_UNIXTIME(timestamp) | 所有其他的日期/时间函数,如:ADDDATE()、SUBDATE()、 HOUR()、MINUTE()、DATE_FORMAT()、TIME_FORMAT()、CONVERT_TZ()等 |
?
?
?
?
?
?
?