Wednesday_Oct_21
.
.
.
MySQL에는 4가지의 날짜와 시간관련 필드가 존재한다.

딱 봐도

DATE는 '2020-10-21'식의 형식
TIME은 '15:18:43'의 형식

그런데 DATETIME과 TIMESTAMP는 '날짜 시간'의 형식인 것 같은데..
형식의 차이는 없고 'date and time value', 'timestamp value'의 차이이다.

그래서 알아보기 위해 테스트를 해보았다.

(테스트는 AWS RDS에서 진행이 되었고 DB는 MySQL이다.)

mysql> show tables;
Empty set (0.01 sec)

일단 현재 아무 테이블도 없다.

먼저 testfield라는 table을 만들고
datetime타입의 datetime필드와
timestamp타입의 timestamp타입의 필드를 만들어주었다.

mysql> create table testfield (
    -> datetime datetime,
    -> timestamp timestamp)
    -> ;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+-----------------------+
| Tables_in_Test_Server |
+-----------------------+
| testfield             |
+-----------------------+
1 row in set (0.00 sec)

mysql> desc testfield;
+-----------+-----------+------+-----+---------+-------+
| Field     | Type      | Null | Key | Default | Extra |
+-----------+-----------+------+-----+---------+-------+
| datetime  | datetime  | YES  |     | NULL    |       |
| timestamp | timestamp | YES  |     | NULL    |       |
+-----------+-----------+------+-----+---------+-------+
2 rows in set (0.01 sec)

자 이제 데이터를 하나 만들어 보려고 한다. 둘 다 현재시간을 넣어서 진행해보겠다.

mysql> insert into testfield values (now(), now());
Query OK, 1 row affected (0.00 sec)

mysql> select * from testfield;
+---------------------+---------------------+
| datetime            | timestamp           |
+---------------------+---------------------+
| 2020-10-21 15:30:05 | 2020-10-21 15:30:05 |
+---------------------+---------------------+
1 row in set (0.01 sec)

현재시간으로 데이터를 넣어 행을 만든 후, 확인을 해보니 두 필드의 차이가 없다.

그럼 여기서 TIME_ZONE의 시간을 변경해 보겠다.

먼저 미국!

mysql> set time_zone = 'america/new_york';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from testfield;
+---------------------+---------------------+
| datetime            | timestamp           |
+---------------------+---------------------+
| 2020-10-21 15:30:05 | 2020-10-21 02:30:05 |
+---------------------+---------------------+
1 row in set (0.01 sec)

지금 잘 보면 datetime의 시간은 그대로 오후 3시 30분으로 되어있는 반면,
timestamp는 새벽 2시 30분의 시간으로 바뀌었다.

현재 나는 TIME_ZONE을 미국에 있는 뉴욕 시간으로 변경을 하였는데
timestamp필드의 시간만 미국 뉴욕에 있는 시간으로 바뀌었다.

그럼 여기서 한 번만 더 유럽에 있는 스페인 마드리드의 시간으로 TIME_ZONE을 변경해보겠다.

mysql> set time_zone = 'europe/madrid';
Query OK, 0 rows affected (0.01 sec)

mysql> select * from testfield;
+---------------------+---------------------+
| datetime            | timestamp           |
+---------------------+---------------------+
| 2020-10-21 15:30:05 | 2020-10-21 08:30:05 |
+---------------------+---------------------+
1 row in set (0.01 sec)

이번에도 역시 datetime필드는 변화가 없고,
timestamp필드의 값만 변경되었다.

시간도 역시 스페인 마드리드의 시간인 오전 8시 30분의 시간을 바뀌었다.

나는 오후 3시 30분에 데이터를 만들었고 TIME_ZONE을 미국 뉴욕과 스페인 마드리드로 바꿔본 결과
시계와 같이 시간대가 변경이 된 것을 볼 수 있었다.

여기서 알 수 있는 사실 = timestamp는 TIME_ZONE에 의존한다.

🤔 아직 해결하지 못한 궁금증

일단 이 테스트를 진행하기 위해 AWS RDS로 진행을 했는데 그 이유는
로컬 DB로 진행을 하니까 set time_zone의 명령어가 먹히지 않는다.

그렇다면 로컬 DB에서 즉, timestamp가 TIME_ZONE을 의존한다면 datetime은 무엇을 의존할까?

빨리 공부해서 수정해야겠다. 끝!!!

profile
🐇 Rabbit can take a rest, but 🐢 turtle can't

0개의 댓글