次の方法でタイムゾーンを変更できます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を参照してください。