DATE, DATETIME, TIMESTAMP 의 차이점

좐쓰 ㅣ 2024. 6. 13. 14:25

반응형

새로 들어갈 프로젝트의 DB 설계를 하던 와중에 등록일, 수정일 같은 날짜 개념의 컬럼을 설계할 때 문득 의문이 들었다.

 

첫 회사에서 TIMESTAMP 를 사용했었고 사수에게 사용하는 이유를 물어보니 TIMESTAMP 가 데이터공간이 더 효율적이다. 라는 말을 듣고 별 생각 없이 쭉 사용해왔는데  이제 내가 주체적으로 DB 를 설계하려 하니 도대체 어떤 이유로 효율적인지 의문이 들어서 남기고자 한다.

 

1-1. DATE

DATE 는 시간을 제외한 날짜를 저장하는 타입으로 기본포맷은 yyyy-MM-dd 이며 '1000-01-01' 부터 '9999-12-31' 까지 저장이 가능하다.

 

1-2. DATEIME 

DATETIME은 날짜와 시간을 함께 저장할 수 있는 타입으로 기본 포맷은 'yyyy-MM-dd HH:mm:ss' 이며 '1000-01-01 00:00:00' 부터 '9999-12-31 23:59:59' 가지 저장이 가능하다.

 

1-3. TIMESTAMP

TIMESTAMP는 날짜와 시간을 타임스탬프 형식으로 저장하는 타입으로 UTC 1970-01-01 00:00:01 부터 2038-01-19 03:14:07 까지의 범위를 저장한다.

 

2. TIMESTAMP vs DATETIME

둘 다 날짜와 시간을 함께 저장한다는 점에서는 같으나 

  • TIMESTAMP 는 사용자의 별도 입력이 없으면 데이터가 마지막으로 입력되거나 변경된 시간이 저장되며 기본적으로 NN 속성을 가지고 있다. 반면 DATETIME 은 별도의 default 값을 설정한게 아니라면 입력이 되지 않는다.
  • DATETIME 은 시스템의 TIME_ZONE 이 변경되어도 값이 변하지 않지만 TIMESTAMP 는 시스템의 TIME_ZONE 에 의존한다.
  • DATETIME 은 문자형으로 저장이 되고 TIMESTAMP 는 숫자형으로 저장이 된다.(1970-01-01 00:00:00 기준으로 몇초가 지났는지를 저장한다.)
  • TIMESTAMP 는 4바이트의 저장공간을 사용하고 DATETIME 은 8바이트의 저장공간을 사용한다.

 

3. 그럼 나는 무엇을 사용해야 할까

우선 내가 하려는 프로젝트는 중국, 베트남까지 고려해야하는 글로벌 프로젝트이며 등록, 수정일 같은 경우는 날짜의 계산 같은 로직 없이 삽입, 수정 정도만 이루어질 예정이라 TIMESTAMP 를 사용하는게 더 적절한 방법 같다.

 

결정에 참고한 글

https://stackoverflow.com/questions/409286/should-i-use-the-datetime-or-timestamp-data-type-in-mysql

반응형

'DB & SQL' 카테고리의 다른 글

[Mybatis]Hard Parsing 과 Soft Parsing 그리고 공통파싱  (0) 2022.12.28