您可以使用set time_zone
更改时区:
mysql> set time_zone='Europe/Helsinki';
mysql> select now();
2012-09-21 16:15:06
mysql> set time_zone='Europe/Paris';
mysql> select now();
2012-09-21 15:15:40
使用这个功能,你可以定义一个函数,返回用户所在时区的当前时间:
create function current_time_in_tz(tz varchar(40)) returns datetime
begin
set @old_tz = @@session.time_zone;
set time_zone=tz;
set @now = now();
set time_zone=@old_tz;
return @now;
end
select id, current_time_in_tz(timezone) from users;
请注意,DATE、TIME 和 DATETIME 值不依赖于时区,因此这些类型的列中的值在查询时不会自动调整。而 TIMESTAMP 的值会被调整。
mysql> create temporary table tbl (dt datetime, ts timestamp);
mysql> insert into tbl values (now(),now());
mysql> select * from tbl;
+
| dt | ts |
+
| 2012-09-21 15:21:56 | 2012-09-21 15:21:56 |
+
mysql> set time_zone='Europe/Helsinki';
mysql> select * from tbl;
+
| dt | ts |
+
| 2012-09-21 15:21:56 | 2012-09-21 16:21:56 |
+
如果
set time_zone
出现以下错误:
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Europe/Helsinki'
您需要使用如下命令将时区信息加载到MySQL中:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
更多信息请参见
http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html。该网站提供有关MySQL数据库的时区支持的详细信息。
SELECT CONVERT_TZ( NOW( ) , 'Europe/Paris', 'America/New_York' )
完全可以正常工作!请在此问题中添加一个答案,说明这一点,我会接受它。 - aaaaaa