MariaDB에서 DATETIME과 TIMESTAMP는 모두 날짜와 시간을 저장하기 위해 사용되지만, 주요 차이는 시간대(Timezone) 처리 방식과 동작 특성에 있습니다.
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 (매우 넓음).*DEFAULT CURRENT_TIMESTAMP를 사용할 수 없습니다. 기본값을 명시적으로 설정해야 합니다.*1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC (유닉스 시간 제한).*DEFAULT CURRENT_TIMESTAMP를 사용하여 기본값으로 현재 시간을 설정할 수 있습니다.*ON UPDATE CURRENT_TIMESTAMP).| 구분 | DATETIME | TIMESTAMP |
|---|---|---|
| 시간대 반영 | 시간대 무관 | 시간대 반영 (UTC로 저장, 자동 변환) |
| 범위 | 1000-01-01 ~ 9999-12-31 | 1970-01-01 ~ 2038-01-19 |
| 저장 형식 | 입력된 그대로 저장 | UTC 기준으로 저장 |
| 기본값 지원 | 기본값 설정 가능 (DEFAULT) | DEFAULT CURRENT_TIMESTAMP 지원 |
| 사용 사례 | 예약 시스템, 단순 시간 기록 | 로그 기록, 글로벌 시간 관리 |
DATETIME 예시:CREATE TABLE events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(50),
event_datetime DATETIME NOT NULL -- 입력된 시간 그대로 저장
);
INSERT INTO events (event_name, event_datetime)
VALUES ('Meeting', '2024-11-29 15:30:00');
TIMESTAMP 예시:CREATE TABLE logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
log_message VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- UTC 변환 저장
);
INSERT INTO logs (log_message)
VALUES ('User logged in'); -- 현재 시간이 자동 저장

create_at 컬럼은 : TIMESTAMP DEFAULT now() 속성입니다.
update_at 컬럼은 : DATETIME DEFAULT now() ON UPDATE now() 속성입니다.
ALTER TABLE posts ADD COLUMN *update_at datetime DEFAULT now() ON UPDATE now();
ALTER TABLE postsposts 테이블을 수정하겠다는 명령입니다.ADD COLUMN update_atupdate_at)을 테이블에 추가합니다.DATETIMEupdate_at 열의 데이터 타입은 DATETIME입니다. 이 열은 날짜와 시간을 저장합니다.DEFAULT NOW()NOW())이 저장됩니다.ON UPDATE NOW()update_at 열이 자동으로 현재 시간으로 업데이트됩니다.ON UPDATE 키워드에 의해 트리거됩니다.즉,
create_at은 레코드가 생성될 때 시간을 적습니다.
update_at은 레코드가 생성될 때 + 레코드 업데이트(ON UPDATE)될 때 시간을 갱신합니다.
결론:
DATETIME 사용.TIMESTAMP 사용.상황에 따라 적합한 데이터 타입을 선택하면 됩니다! 😊