MySQL에서 일시(년,월,일,시,분,초) 정보를 저장할 때 주로 DATETIME과 TIMESTAMP를 사용합니다. 그런데 어떤 경우에 DATETIME을 사용해야 하는지, TIMESTAMP를 사용해야 하는지 판단이 잘 안 설 수 있습니다. 아래 둘의 차이에 대한 내용을 보고 나시면 어느 정도 판단의 기준이 생겨나실 것입니다.
DATETIME과 TIMESTAMP 비교
범위
DATETIME: 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지의 범위를 가집니다. DATETIME은 날짜 및 시간 정보를 지정하기에 더 넓은 범위를 제공합니다. (8바이트)
TIMESTAMP: 1970-01-01 00:00:01 UTC부터 2038-01-19 03:14:07 UTC까지의 범위를 가집니다. TIMESTAMP는 32비트(4바이트) 정수로 저장되어 있어, 2038년 이후의 날짜에 대해서는 문제가 발생할 수 있습니다.
저장 방식
DATETIME: 데이터베이스에 입력한 값과 동일한 형태로 저장됩니다. 즉, 입력한 날짜 및 시간 정보가 그대로 문자열로 저장됩니다.
TIMESTAMP: UTC를 기준으로 1970년 1월 1일 00:00:01부터 경과한 "초"가 숫자형으로 저장됩니다. TIMESTAMP는 서버의 타임존 설정에 따라 변환되어 저장되므로, 서로 다른 타임존 설정을 가진 서버 간에 값을 교환할 때 문제가 발생할 수 있습니다.
자동 업데이트
DATETIME: 수동으로 값을 입력해야 합니다. 자동으로 업데이트되게 할 수 없습니다.
TIMESTAMP: 기본적으로 ON UPDATE CURRENT_TIMESTAMP 옵션이 설정되어 있으며, 행이 업데이트될 때마다 현재 시간으로 자동 업데이트됩니다.
용도
DATETIME: 일반적으로 날짜 및 시간 정보를 저장하고 검색하는 데 사용됩니다. 예를 들어, 이벤트의 일정 날짜 및 시간을 저장하거나 시간 간격을 계산하는 데 유용합니다.
TIMESTAMP: 주로 변경 이벤트를 추적하거나 행의 버전을 관리하는 데 사용됩니다. 특히, row-level 변경 추적이 필요한 경우 TIMESTAMP를 활용할 수 있습니다.
'DB > SQL' 카테고리의 다른 글
[Oracle] Oracle에서 LIMIT에 해당하는 SQL 문법은? (0) | 2024.01.05 |
---|---|
[MySQL] FROM DUAL 이란? (0) | 2023.10.09 |
[MySQL] JSON 필드 Null 체크하는 방법 (0) | 2023.09.27 |
[MySQL] 같지 않은 것을 조회할 때 사용할 수 있는 !=와 <> 연산자의 차이 (0) | 2023.09.23 |
[MySQL] 복합 인덱스 생성시 컬럼 나열 순서 (0) | 2023.06.21 |
[MySQL] root 비밀번호 수정 방법 (MySQL 8.0 버전) (2) | 2023.05.11 |
[PostgreSQL] user 테이블 조회 방법 (0) | 2023.03.16 |
[PostgreSQL] postgresql-client 설치 후 터미널에서 데이터베이스 접속 명령어 (0) | 2023.03.15 |