MySQL UTC 시간을 기본 타임 스탬프로 설정 타임 스탬프 열을 어떻게 설정합니까? MySQL은 UTC_TIMESTAMP()UTC 타임

기본값이 현재 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_TIMESTAMPUTC로 저장되었지만 현재 시간대로 검색된 @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_TIMESTAMPON 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이 없습니다.

이것이 도움이되기를 바랍니다.