Ada*_*tan 41 mysql syntax timestamp utc-time
如何设置默认值为当前 UTC 时间的时间戳列?
MySQL 使用UTC_TIMESTAMP()UTC 时间戳函数:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
所以我试过:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Run Code Online (Sandbox Code Playgroud)
和其他变体,如UTC_TIMESTAMP(),但没有成功。
Der*_*ney 56
要与CURRENT_TIMESTAMP存储为 UTC 但作为当前时区检索的@ypercube 的评论一起使用,您可以使用--default_time_zone检索选项影响服务器的时区设置。这允许您的检索始终使用 UTC。
默认情况下,该选项是“SYSTEM”,这是您设置系统时区的方式(可能是也可能不是 UTC!):
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 16:28:45 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
您可以动态设置:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
或永久在您的 my.cnf 中:
[mysqld]
**other variables**
default_time_zone='+00:00'
Run Code Online (Sandbox Code Playgroud)
重新启动您的服务器,您将看到更改:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
小智 12
对于MySQL 8.0.13,如果用括号将其括起来,则可以用作UTC_TIMESTAMP默认值,如下所示:
CREATE TABLE `blah` (
id int NOT NULL AUTO_INCREMENT,
creation_time TIMESTAMP NOT NULL DEFAULT (UTC_TIMESTAMP)
)
Run Code Online (Sandbox Code Playgroud)
您不能指定UTC_TIMESTAMP为默认来指定自动属性,您应该只使用 DEFAULTCURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句。
您也可以UTC_TIMESTAMP为表插入这样的值:
CREATE TABLE `test` (
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
INSERT 查询会像这样插入 UTC_TIMESTAMP:
insert into `test` (`ts`)
values
(utc_timestamp()) ;
Run Code Online (Sandbox Code Playgroud)
小智 5
我的解决方案是使用触发器:
DELIMITER //
CREATE TRIGGER `update_to_utc` BEFORE INSERT ON `my_table` FOR EACH ROW BEGIN
set new.my_field=utc_timestamp();
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
然后每个新插入的行都将具有 UTC 时间戳。