你可以改變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