你可以改变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 [email protected]_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
为什么不使用CONVERT_TZ? http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert -tz – Nin
因为我显然是个笨蛋。知道我的MySQL服务器在法国,'SELECT CONVERT_TZ(NOW(),'Europe/Paris','America/New_York')'工作得很好!请在这个问题上添加一个答案,说明这一点,我会接受它。 – Pioul
我经常在星期五的下午有这个:) – Nin