들어가며
mysql을 사용하며 날짜를 다루게 되면 타입으로 datetime과 timestamp 타입을 볼 수 있다. 시간을 넣어서 보면 둘이 동일한 시간이 찍힌다. 하지만 분명 용도의 차이가 있기에 데이터 타입이 나뉘어 있을 것. 그래서 둘의 차이점을 비교한 결과를 정리한다.
날짜형 데이터 타입
먼저 둘의 차이를 정리하기 앞서 날짜형 데이터 타입이 어떤 것이 존재하는지 알아본다.
DATE 타입
- 날짜는 포함하지만 시간은 포함하지 않을 때 사용
- YYYY-MM-DD 형식
- '1000-01-01' 부터 '9999-12-31' 까지만 입력 가능
DATETIME 타입
- 날짜와 시간을 모두 포함하는 타입
- YYYY-MM-DD HH:MM:SS 형식
- '1000-01-01 00:00:00' 부터 '9999-12-31 23:59:59' 까지 입력 가능
TIME 타입
- 시간에 대한 정보만 필요할 때 사용
- -838:59:59 ~ 838:59:59 까지 표현 가능
- 838은 DAY의 값을 표현할 수 있는 범위까지 이므로 838시간
TIMESTAMP 타입
- 날짜와 시간 모두를 포함한 타입
- '1970-01-01 00:00:01' - '2038-01-19 03:14:07 UTC' 까지 표현 가능
- 2038-01-19 인 이유는 초를 4byte 로 저장하기 때문에 표현할 수 있는 가장 큰 값이 2038-01-19임 (해당 내용 레퍼런스 아래 링크 참고)
https://dev.mysql.com/doc/refman/8.0/en/datetime.html
datetime과 timestamp 차이
위에 내용만 보고도 시간의 표현 범위가 다른 것을 확인하여 차이를 확인할 수 있다. 왜 저렇게 다르게 표현이 되는지와 값을 보기 위해 테스트 디비를 만들어 진행한다.
먼저 db에 테스트 테이블을 만들고 컬럼들을 추가한다. (차이를 보기위해 datetime과 timestamp 타입을 각 각 하나씩 생성)
이제 각각의 컬럼의 현재 시간을 생성해준다.
time_zone 설정을 바꾸고 다시 조회를 해본다.
그러면 다음과 같이 시간이 변경되는 것을 확인 할 수 있다.
변경되는 이유
timestamp는 위에 테스트에서 확인한 것과 같이 time_zone의 의존하는 것을 확인했다. 만약 현재 개발중인 서비스가 한국 내에서만 서비스를 진행하는 것이라면 datetime으로 사용해도 무방하지만 글로벌 서비스를 진행하는데 DateTime을 사용하게 되면 time_zone이 반영이 되지 않으므로 이런 경우에는 timestamp를 사용한다.
'Database' 카테고리의 다른 글
MySql char varchar text 정리 (1) | 2022.10.11 |
---|---|
MySQL - 특정 데이터 포함 확인 LOCATE / INSTR / LIKE (0) | 2022.08.19 |
DataGrip - 테이블 정보 한눈에 확인하는 방법 (0) | 2022.02.21 |
MongoDB - MongoTemplate UPDATE METHOD (0) | 2022.02.05 |
MongoDB 관련 정리 (0) | 2022.01.26 |
댓글