SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
타임존 조회 했을 때 SYSTEM 으로 나온다면 마리아 DB가 동작하고 있는 서버의 타임존을 따라 간다.
[root@mariadb-setting-test binary]# date
Thu Sep 14 15:40:37 KST 2023
동작하고 있는 서버의 시간을 찍어보니 KST 이다.
그럼 DB에서 한국 시간이 나올까?
SELECT @@global.time_zone, @@session.time_zone, now();
+--------------------+---------------------+---------------------+
| @@global.time_zone | @@session.time_zone | now() |
+--------------------+---------------------+---------------------+
| SYSTEM | SYSTEM | 2023-09-14 15:41:56 |
+--------------------+---------------------+---------------------+
데이터베이스의 now()를 사용하면 현재 한국 시간이 나온다.
이렇게 된다면 insert를 하거나 update를 할 때 시간을 사용하게 된다면 kst 시간으로 들어갈 것이다.
데이터베이스에서 시간을 저장할 때 DATETIME 또는 TIMESTAMP를 사용한다.
DATETIME은 입력된 날짜와 시간 그대로 데이터를 저장
TIMESTAMP는 time_zone 시스템 변수로 값을 저장
만약 TIMESTAMP를 쓰고 있는데 타임존이 변경되면 저장되는 값이 그때그때 달라지게 될 것이다.
select @@global.time_zone, @@session.time_zone,@@system_time_zone;
+--------------------+---------------------+--------------------+
| @@global.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| SYSTEM | SYSTEM | KST |
+--------------------+---------------------+--------------------+
타임존을 변경 해보자
서버의 타임존이 KST라고 나와 있다.
서버의 타임존을 바꾸자니, 서버에서 별도로 동작하는 crontab이나 시간을 가지고 동작하는 곳에 문제가 생길 것으로 보여 수정하지 않는다.
그래서 my.cnf에서 default 타임존을 변경한다
# TimeZone
default-time-zone= "+0:00"
데이터베이스 타임존 설정에서 +0:00을 사용하면 UTC(협정 세계 시간)로 설정 된다고 한다.
-0:00 또한 가능하다.
default-time-zone=”UTC”는 동작하지 않는다. 에러 발생
MariaDB [dbtest]> select @@global.time_zone, @@session.time_zone,@@system_time_zone;
+--------------------+---------------------+--------------------+
| @@global.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| +00:00 | +00:00 | KST |
+--------------------+---------------------+--------------------+
마리아 디비가 동작하는 서버는 KST로 설정되어 있다.
하지만 마리아 데이터베이스 글로벌 타임존이나 접속하고 있는 세션의 타임존은 +0:00(UTC)로 설정 되어 있다.
이러면 마리아 데이터베이스에 INSERT를 하거나 NOW()를 할 때 DATETIME, TIMESTAMP 둘다 UTC로 저장이 된다.
insert into datetest values(now(), now());
select * from datetest;
+---------------------+---------------------+
| mydatetime | mytimestamp |
+---------------------+---------------------+
| 2023-09-14 07:13:34 | 2023-09-14 07:13:34 |
+---------------------+---------------------+
2023-09-14 16시 13분에 INSERT를 했다.
DATETIME, TIMESTAMP 둘다 9시간을 뺀 07시 13분이 제대로 저장이 된 것을 볼 수 있다.