MYSQL更新时的自定义时间
我有一个包含一些行的表,其中有一个定义如下:MYSQL更新时的自定义时间,mysql,timestamp,Mysql,Timestamp,我有一个包含一些行的表,其中有一个定义如下: `metric_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 所以我实际上希望它在向表中插入数据时自动插入时间戳。确实如此。但我需要的是将基于GMT的时间写入该字段(当前服务器时间类似于GMT+2) 有没有办法对MYSQL说去做这样的事情 INSERT INTO table_name(column1, metric_update_time) VALUES('dummy',
`metric_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
所以我实际上希望它在向表中插入数据时自动插入时间戳。确实如此。但我需要的是将基于GMT的时间写入该字段(当前服务器时间类似于GMT+2)
有没有办法对MYSQL说去做这样的事情
INSERT INTO table_name(column1, metric_update_time) VALUES('dummy', CONVERT_TZ(CURRENT_TIMESTAMP,'+02:00','+03:00');
这将把插入的时间戳从GMT+2
转换为GMT+3
,如果服务器配置正确,则在内部(因为这就是原因)。当您检索此数据时,它们将转换回会话时区。如果希望在GMT时区中显示,则需要在检索数据时进行转换,而不是在插入数据时进行转换
例如,请参见下面的控制台转储。您可以自己运行这些命令进行检查
mysql> use test;
Database changed
mysql> -- let's create a table we'll be working with
mysql> CREATE TABLE tsTable (
-> ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> -- let's check current time as well as timezone settings
mysql> SELECT CURTIME(),@@global.time_zone, @@session.time_zone;
+-----------+--------------------+---------------------+
| CURTIME() | @@global.time_zone | @@session.time_zone |
+-----------+--------------------+---------------------+
| 16:25:51 | SYSTEM | +02:00 |
+-----------+--------------------+---------------------+
1 row in set (0.05 sec)
mysql> -- inserting empty row to table to trigger auto timestamp
mysql> INSERT INTO tsTable VALUES (null,null);
Query OK, 1 row affected (0.00 sec)
mysql> -- looks like the time in my local timezone is stored in table
mysql> SELECT * FROM tsTable;
+----+---------------------+
| ID | ts |
+----+---------------------+
| 1 | 2011-07-28 16:26:25 |
+----+---------------------+
1 row in set (0.00 sec)
mysql> -- switching to GMT
mysql> SET SESSION time_zone = '+0:00';
Query OK, 0 rows affected (0.00 sec)
mysql> -- check current time and timezone settings again
mysql> SELECT CURTIME(),@@global.time_zone, @@session.time_zone;
+-----------+--------------------+---------------------+
| CURTIME() | @@global.time_zone | @@session.time_zone |
+-----------+--------------------+---------------------+
| 14:27:53 | SYSTEM | +00:00 |
+-----------+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> -- note: CURTIME() returns time two hours 'earlier' than before
mysql> -- let's see what's stored in the table again
mysql> SELECT * FROM tsTable;
+----+---------------------+
| ID | ts |
+----+---------------------+
| 1 | 2011-07-28 14:26:25 |
+----+---------------------+
1 row in set (0.00 sec)
mysql> -- TIMESTAMP is two hours 'earlier' than before too! Magick!
好的,我知道,但是我可以这样定义它:'度量更新时间戳非空默认转换'(当前时间戳,+02:00',+03:00'),@Igor Hrcek:不,你不能这样做。这是非常好的信息。我认为Windows版本对待时区的方式不同,不是吗?