기본값이 현재 UTC 시간 인 타임 스탬프 열을 어떻게 설정합니까?
MySQL은 UTC_TIMESTAMP()
UTC 타임 스탬프에 함수를 사용 합니다.
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
그래서 시도했습니다.
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
그리고 다른 변형은 UTC_TIMESTAMP()
성공했지만 성공하지 못했습니다.
답변
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)
이를 동적으로 설정할 수 있습니다.
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)
또는 my.cnf에서 영구적으로 :
[mysqld]
**other variables**
default_time_zone='+00:00'
서버를 다시 시작하면 변경 사항이 표시됩니다.
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)
답변
UTC_TIMESTAMP
자동 특성을 지정하기 위해 기본값으로 지정할 수 없습니다 . DEFAULT CURRENT_TIMESTAMP
및 ON UPDATE CURRENT_TIMESTAMP
절만 사용해야 합니다.
또한 UTC_TIMESTAMP
테이블의 경우 다음과 같이 값 을 삽입 할 수 있습니다 .
CREATE TABLE `test` (
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT 쿼리는 UTC_TImeSTAMP를 삽입하는 다음과 같습니다.
insert into `test` (`ts`)
values
(utc_timestamp()) ;
답변
내 솔루션은 트리거입니다.
DELIMITER //
CREATE TRIGGER `update_to_utc` BEFORE INSERT ON `my_table` FOR EACH ROW BEGIN
set new.my_field=utc_timestamp();
END//
DELIMITER ;
그런 다음 새로 삽입 된 모든 행의 타임 스탬프는 UTC로 표시됩니다.
답변
mariadb의 경우 글로벌 my.cnf 솔루션 만 작동했습니다.
이 글에서 @Derek Downey의 영구적 인 솔루션 인 mariadb 10.2를 위해.
[mysqld]
**other variables**
default_time_zone='+00:00'
mariadb 10.0 (i는 10.0.32)의 경우 https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc를 참조 하십시오.
[mysqld_safe]
**other variables**
timezone = UTC
두 정의 모두 mariadb 10.2의 my.cnf에 공존 할 수 있지만 더 이상 mariadb 10.0이 없습니다.
이것이 도움이되기를 바랍니다.