본문 바로가기
Database

MySql - Datetime 과 Timestamp 차이점 및 날짜형 데이터 타입 정리

by devLog by Ronnie's 2022. 4. 22.

들어가며


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

 

MySQL :: MySQL 8.0 Reference Manual :: 11.2.2 The DATE, DATETIME, and TIMESTAMP Types

11.2.2 The DATE, DATETIME, and TIMESTAMP Types The DATE, DATETIME, and TIMESTAMP types are related. This section describes their characteristics, how they are similar, and how they differ. MySQL recognizes DATE, DATETIME, and TIMESTAMP values in several f

dev.mysql.com

 

datetime과 timestamp 차이


위에 내용만 보고도 시간의 표현 범위가 다른 것을 확인하여 차이를 확인할 수 있다. 왜 저렇게 다르게 표현이 되는지와 값을 보기 위해 테스트 디비를 만들어 진행한다.

 

먼저 db에 테스트 테이블을 만들고 컬럼들을 추가한다. (차이를 보기위해 datetime과 timestamp 타입을 각 각 하나씩 생성)

이제 각각의 컬럼의 현재 시간을 생성해준다.

time_zone 설정을 바꾸고 다시 조회를 해본다.

그러면 다음과 같이 시간이 변경되는 것을 확인 할 수 있다.

 

변경되는 이유


timestamp는 위에 테스트에서 확인한 것과 같이 time_zone의 의존하는 것을 확인했다. 만약 현재 개발중인 서비스가 한국 내에서만 서비스를 진행하는 것이라면 datetime으로 사용해도 무방하지만 글로벌 서비스를 진행하는데  DateTime을 사용하게 되면 time_zone이 반영이 되지 않으므로 이런 경우에는 timestamp를 사용한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글