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은 무엇을 의존할까?
빨리 공부해서 수정해야겠다. 끝!!!