MySQL의 날짜/시간 타입
MySQL의 날짜/시간타입으로는 DATE, DATETIME, TIME, TIMESTAMP가 있다.
DATE 타입은
- 날짜만 포함하는 타입
- YYYY-mm-dd 형식으로 입력 가능
- 1000-01-01부터 9999-12-31까지만 입력 가능
DATETIME 타입은
- 날짜와 시간을 모두 포함하는 타입
- YYYY-mm-dd HH:MM:SS 형식 입력 가능
- 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지 입력가능
TIME 타입은
- 시간만 포함하는 타입
- HH:MM:SS 형식으로 입력 가능
- -838:59:59부터 838:59:59까지 가질 수 있음
TIMESTAMP 타입은
- 날짜와 시간을 모두 포함하는 타입
- YYYY-mm-dd HH:MM:SS 형식 입력 가능
- 1970-01-01 00:00:01 부터 2038-01-19 03:14:07 UTC 까지 표현 가능
- TIMESTAMP는 타임존에 영향을 받기 때문에 time_zone 시스템 변수에 입력된 시간대 정보를 기반으로 데이터를 입력받아 그 정보를 UTC로 변환하여 저장
DATETIME과 TIMESTAMP 차이
타입 | 저장 공간 | 자동 입력 | 타임존 영향 | |||
DATETIME | 문자형 | 8byte | X | X | ||
TIMESTAMP | 숫자형 | 4byte | O | O (UTC로 변환됨) |
본인은 Spring Boot와 연동하고자 하여 TIMESTAMP로 하려고 한다.
TIMESTAMP 활용
1. updatedAt 칼럼 추가
ALTER TABLE {테이블명} add COLUMN {칼럼명} TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
# 예시)
ALTER TABLE users add COLUMN updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
- NOT NULL 대신 DEFAULT
- NOW() 대신 CURRENT_TIMESTAMP
- ON UPDATE : 수정 시에도 시간이 자동 수정되도록 함
2. 데이터 추가/수정 시 타임 확인
2021-10-08-10:27 에 데이터를 수정했다. 저장된 시간은 01:27 이다.
왜?
TIMESTAMP는 타임존에 영향을 받기 때문에 time_zone 시스템 변수에 입력된 시간대 정보를 기반으로 데이터를 입력받아 그 정보를 UTC로 변환하여 저장한다.
3. 타임존 확인
아래와 같이 현재는 한국 타임존이 적용되지 않았기 때문에, 한국 시간 10:27 보다 -9 인 01:27 UTC 시간으로 저장된 것이다.
(KCT는 UCT + 9시간)
SELECT @@global.time_zone, @@session.time_zone,@@system_time_zone;
4. 타임존 변경
여러 글들을 보니 복잡해보였는데 나는 의외로 간단하게 변경할 수 있었다.
보통 아래 두 명령을 실행해야하는데, 신기하게도.. 본인은 첫번째 명령어만 실행해서 되었다.
(본인은 두번째 명령어를 실행했더니 아래 오류가 떴다.
Error Code: 1227. Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation)
SET time_zone='Asia/Seoul';
SET GLOBAL time_zone='Asia/Seoul';
만약 실행되지 않으면 아래 글들을 참고하길 바란다.
- https://jwkim96.tistory.com/23
- https://stackoverflow.com/questions/44015692/access-denied-you-need-at-least-one-of-the-super-privileges-for-this-operat
5. 변경된 타임존 확인 (데이터 업데이트)
현재 시간(11:02)과 똑같이 바뀌었다.
참고 글
https://velog.io/@kho5420/MySQL-Datetime%EA%B3%BC-Timestamp%EC%9D%98-%EC%B0%A8%EC%9D%B4
'백엔드 개발하며 작성한 > 데이터베이스' 카테고리의 다른 글
[ORM] 상속 관계 매핑 (0) | 2022.05.20 |
---|---|
[ORM] 연관관계의 주인을 정해야하는 이유 (0) | 2022.05.20 |
[ORM > JPA] 영속성 컨텍스트 (0) | 2022.04.14 |
[MySQL Workbench] ERD를 SQL 코드로 변환하기 (0) | 2021.09.02 |
cmd로 MongoDB에 데이터 저장하기 (0) | 2021.05.20 |