본문 바로가기

db

TIMESTAMP, DATETIME, DATE 타입이란?

들어가면서

최근 면접을 갔는데 TIMESTAMP에 대해서 질문을 받았다. 하지만 시간 관련 속성에 대해서 깊게 생각해본적이 없어서 대답을 해도 틀리게 대답을 했다. 이번 기회에 시간을 나타내는 속성이 어떤 것인지 공부를 하고 정리를 해보았다.

DATE 타입

DATE는 년, 월, 일 까지의 시간 정보가 포함된 타입이다. 표현 가능한 범위는 1000-01-01 ~ 9999-12-31이다.

DATETIME 타입

DATETIME에서는 년, 월, 일, 시, 분, 초 까지의 시간 정보가 포함된 타입이다. 표현 가능한 범위는 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999이다.
MySQL에서는 최대 마이크로초(6자리) 정밀도의 소수 초 부분이 포홤될 수 있다.

TIMESTAMP 타입

TIMESTAMP에서는 년, 월, 일, 시, 분, 초, 타임존의 시간 정보가 포함된 타입이다. 표현 가능한 범위는 1970-01-01 00:00:01.000000 ~ '2038-01-19 03:14:07.499999이고 타임존의 개념이 추가된 타입이다.
MySQL에서는 최대 마이크로초(6자리) 정밀도의 소수 초 부분이 포함될 수 있다.
타임존의 개념을 가지고 있지만 2038년 이후의 시간 데이터를 저장할 수 없다는 한계를 가지고 있다는 것이 특징이다.

2038년 문제?

TIMESTAMP의 표현의 한계가 2038년에 오는 것을 나타내는 문제를 말한다. 이 문제의 원인은 32bit(8byte)의 크기로 저장된 TIMESTAMP 타입의 한계이기 때문에 발생하는 문제이다. 이 문제를 해결하기 위해서는 TIMESTAMP의 크기를 64bit로 확장하여 적용하면 해결할 수 있다.


개인적으로 이 문제를 해결하기 위해서는 TIMESTAMP를 쓰지 않고 DATETIME을 사용하고 타입존의 개념을 없애는 것은 어떨까? 데이터를 저장할 때, 영국 시간이 표준이니까 그 시간대를 기준으로 시간을 모두 변경하는 식으로 구현할 수 있겠다는 생각이든다.

DB 서버에 따른 차이점 정리

데이터베이스 시스템 DATE 크기 DATE 표현 방식 DATETIME 크기 DATETIME 표현 방식 TIMESTAMP 크기 TIMESTAMP 표현 방식
MySQL 3 bytes 'YYYY-MM-DD' 8 bytes 'YYYY-MM-DD HH:MM:SS' 4 bytes 'YYYY-MM-DD HH:MM:SS'
PostgreSQL 4 bytes 'YYYY-MM-DD' 8 bytes 'YYYY-MM-DD HH:MM:SS' 8 bytes 'YYYY-MM-DD HH:MM:SS'
SQLite 8 bytes 'YYYY-MM-DD' 8 bytes 'YYYY-MM-DD HH:MM:SS' N/A N/A
Microsoft SQL Server 3 bytes 'YYYY-MM-DD' 8 bytes 'YYYY-MM-DD HH:MM:SS' 8 bytes 'YYYY-MM-DD HH:MM:SS'
Oracle 7 bytes 'YYYY-MM-DD' 7 bytes 'YYYY-MM-DD HH24:MI:SS' 7 bytes 'YYYY-MM-DD HH24:MI:SS'

Reference

 

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

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

'db' 카테고리의 다른 글

index가 왜 필요한가?  (1) 2023.04.25
QueryDsl 간단한 내용 요약  (0) 2023.03.22