Data/MySQL

[MySQL] Timestamp vs DateTime

누구세연 2024. 4. 2. 00:08

MySQL을 사용하며 날짜와 시간 정보를 저장하는 데에 사용되는 Timestamp와 DateTime의 대하여 알아보겠습니다.

 

Timestamp

  • 특정 이벤트가 발생한 시간을 정확하게 기록하기 위해 사용되는 데이터 유형
  • 일반적으로 날짜와 시간 정보를 포함하여, 이를 통해 특정 이벤트가 언제 발생했는지를 정확하게 추적할 수 있습니다.
  • 주로 데이터베이스에서 이벤트 로깅, 데이터 변경 이력 추적 등의 용도로 사용됩니다.
  • Timestamp는 보통 시간대(time zone) 정보를 포함하며, 시간대 변환을 고려하여 데이터를 처리해야 합니다.

 

DateTime

  • 날짜와 시간 정보를 나타내는 데이터 유형
  • Timestamp와 마찬가지로 날짜와 시간을 저장할 수 있지만, 시간대 정보를 포함하지 않는 경우가 일반적입니다.
  • 주로 정확한 날짜와 시간 정보가 필요한 경우 사용됩니다. 예를 들어, 회의 일정, 생일 등을 저장할 때 사용될 수 있습니다.
  • 일반적으로 로컬 시간대를 가정하고 데이터를 저장하므로, 시간대 변환에 대한 고려가 필요하지 않습니다.

 

Timestamp와 DateTime 비교

데이터가 어떻게 다른지 직접 확인해 보기 위해 테이블을 생성해 보겠습니다.

 

현재 시점으로 데이터를 추가해 보겠습니다.

둘 다 데이터가 동일한 것을 확인할 수 있습니다.

 

Time_Zone을 변경하여 현재 시점으로 데이터를 추가해 보겠습니다.

 

변경된 timezone을 기준으로 timestamp이 변경되어 입력되는 것을 확인할 수 있습니다.

TimeStamp는 time_zone에 의존하고 있는 것을 확인할 수 있었습니다.

 

Timestamp와 DateTime 공통점

  • 둘 다 날짜와 시간을 저장할 수 있는 데이터 유형입니다.
  • TIMESTAMP와 DATETIME 모두 "YYYY-MM-DD HH:MM:SS"의 형식으로 데이터 저장합니다.

 

Timestamp와 DateTime 차이점

  범위 표준 시간대
Timestamp 1970년 1월 1일 00:00:01 UTC에서 2038년 1월 19일 03:14:07 UTC까지의 범위 각 지역의 표준시간대
DateTime MySQL에 종속되어 있어서 "1000-01-01 00:00:00"부터 "9999-12-31 23:59:59"까지의 범위 어떤 시간대에도 동일

 

 

새로운 데이터 저장 시 자동 업데이트

Timestamp 컬럼을 새로운 데이터가 삽입될 때 자동으로 현재 시간으로 설정될 수 있습니다.

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ...
);

위처럼 컬럼을 정의할 때 'DEFAULT CURRENT_TIMESTAMP'를 사용할 수 있습니다.

이렇게 하면 새로운 데이터가 삽일될때마다 created_at 컬럼에 현재 시간이 자동으로 설정됩니다.

(DateTime에도 적용 가능)

수정 시 자동 업데이트

Timestamp 컬럼은 수정되면 자동으로 현재 시간으로 업데이트될 수 있습니다.

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    ...
);

위처럼 컬럼을 정의할 때 'ON UPDATE CURRENT_TIMESTAMP'를 사용할 수 있습니다.

이렇게 하면 데이터 수정될 때마다 updated_at 컬럼에 자동으로 현재 시간으로 업데이트됩니다.

(DateTime에도 적용 가능)