Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL更新时的自定义时间_Mysql_Timestamp - Fatal编程技术网

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版本对待时区的方式不同,不是吗?