MySQL에서 DATE와 DATETIME의 차이점은 무엇인가요?

_____
자주 묻는 질문(FAQ): MySQL에서 DATE와 DATETIME의 차이점

Q1. DATE와 DATETIME은 각각 무엇을 저장하나요?
A1.
- DATE: 연도–월–일(YYYY-MM-DD) 형식으로 ‘날짜’만 저장
- DATETIME: 연도–월–일 시:분:초(YYYY-MM-DD HH:MM:SS) 형식으로 ‘날짜와 시각’을 함께 저장

Q2. 저장 가능한 범위와 포맷은 어떻게 되나요?
A2.
- DATE
• 범위: ‘1000-01-01’ ~ ‘9999-12-31’
• 포맷: ‘YYYY-MM-DD’
- DATETIME
• 범위: ‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’
• 포맷: ‘YYYY-MM-DD HH:MM:SS’
• (MySQL 5.6.4 이상) DATETIME(fsp)로 마이크로초(.000000~.999999) 정밀도 설정 가능

Q3. 저장 공간(Storage size)은 어떻게 다른가요?
A3.
- DATE: 3바이트
- DATETIME
• MySQL 5.5 이하: 8바이트
• MySQL 5.6.4 이상 일반 DATETIME: 5바이트
• DATETIME(fsp): fsp(0~6)에 따라 5~9바이트

Q4. 시간대(Time zone)를 자동 변환하나요?
A4.
- DATE, DATETIME 모두 타임존 정보를 저장하지 않으며, INSERT/SELECT 시 자동 변환되지 않음
- 반면 TIMESTAMP는 서버 타임존 ↔ 클라이언트 타임존 간 변환 기능 제공

Q5. 기본값(Default value) 설정 차이는?
A5.
- DATE: 기본적으로 ‘0000-00-00’ (NO_ZERO_DATE 모드 시 오류)
- DATETIME
• MySQL 5.6.5 이전: ‘0000-00-00 00:00:00’
• MySQL 5.6.5 이상: DEFAULT CURRENT_TIMESTAMP, ON UPDATE CURRENT_TIMESTAMP 가능

Q6. 주요 사용 사례는 어떻게 구분되나요?
A6.
- DATE
• 생년월일, 기념일, 휴가일 등 ‘시간 정보 불필요한’ 날짜 저장
- DATETIME
• 주문 시간, 로그 기록, 게시물 작성 시각 등 ‘시각 정보까지 관리’해야 할 때

Q7. 성능 차이가 있나요?
A7.
- 저장 공간 차이에 따른 I/O 비용만 존재(3바이트 vs 5~9바이트)
- 조회·인덱싱 성능은 큰 차이 없음
- 불필요하게 DATETIME을 남용하면 디스크·메모리 사용량 증가

Q8. 날짜/시간 연산 시 유의점은?
A8.
- DATE 간 뺄셈: 일(day) 단위 차이 반환
- DATETIME 간 뺄셈: 시간(hour)·분(minute)·초(second)까지 계산
- DATETIME → DATE 변환: DATE(col) 또는 DATE_FORMAT 사용

Q9. TIMESTAMP와는 어떻게 다른가요?
A9.
- TIMESTAMP: 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC, 4바이트, 타임존 변환 지원
- DATETIME: 1000-01-01 ~ 9999-12-31, 서버 로컬 그대로 저장, 타임존 비(非)변환

Q10. 언제 DATE 대신 DATETIME을 사용해야 하나요?
A10.
- 시간까지 정확히 기록해야 하는 모든 이벤트
- 통계·로그·이력 관리 시 정밀한 타임스탬프 필요 시
- 반대로 시간 정보 불필요할 땐 DATE 사용해 저장 공간 절감 권장

―――
위 FAQ를 참고하여 데이터 모델링 시 용도와 성능 특성에 맞게 DATE와 DATETIME을 선택하세요.
MySQL에서 DATE와 DATETIME은 모두 날짜 및 시간 정보를 저장하는 데이터 타입이지만, 그 사용 목적과 저장하는 정보의 범위에서 중요한 차이점이 있습니다.

이 두 데이터 타입의 차이점을 이해하는 것은 데이터베이스 설계와 쿼리 작성 시 매우 중요합니다.

1. 기본 정의- DATE : DATE 데이터 타입은 날짜만을 저장합니다.

이 타입은 연도, 월, 일의 정보를 포함하며, 형식은 'YYYY-MM-DD'입니다.

예를 들어, '2023-10-01'은 2023년 10월 1일을 나타냅니다.

DATE 타입은 시간 정보를 포함하지 않기 때문에, 시간 관련 연산이나 비교를 수행할 수 없습니다.

- DATETIME : DATETIME 데이터 타입은 날짜와 시간 모두를 저장합니다.

이 타입은 연도, 월, 일, 시, 분, 초의 정보를 포함하며, 형식은 'YYYY-MM-DD HH:MM:SS'입니다.

예를 들어, '2023-10-01 14:30:00'은 2023년 10월 1일 오후 2시 30분을 나타냅니다.

DATETIME 타입은 시간 정보를 포함하므로, 시간에 대한 연산이나 비교를 수행할 수 있습니다.



2. 저장 범위- DATE : DATE 타입은 1000-01-01부터 9999-12-31까지의 날짜를 저장할 수 있습니다.

이는 매우 넓은 범위로, 대부분의 애플리케이션에서 요구하는 날짜 범위를 충분히 커버합니다.

- DATETIME : DATETIME 타입은 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지의 날짜와 시간을 저장할 수 있습니다.

이 역시 넓은 범위를 제공하지만, 시간 정보를 포함하기 때문에 더 많은 정보를 저장할 수 있습니다.



3. 저장 공간- DATE : DATE 타입은 3바이트의 저장 공간을 사용합니다.

이는 날짜 정보를 효율적으로 저장하기 위한 설계입니다.

- DATETIME : DATETIME 타입은 8바이트의 저장 공간을 사용합니다.

이는 날짜와 시간 정보를 모두 포함하기 때문입니다.

따라서, 공간 효율성 측면에서 DATE 타입이 더 유리할 수 있습니다.



4. 사용 사례- DATE : DATE 타입은 주로 생일, 기념일, 이벤트 날짜 등과 같이 시간 정보가 필요 없는 경우에 사용됩니다.

예를 들어, 사용자의 생일 정보를 저장할 때는 DATE 타입이 적합합니다.

- DATETIME : DATETIME 타입은 로그 기록, 예약 시스템, 거래 시간 등과 같이 날짜와 시간 정보가 모두 필요한 경우에 사용됩니다.

예를 들어, 주문이 생성된 시간을 기록할 때는 DATETIME 타입이 적합합니다.



5. 시간대 처리- DATE : DATE 타입은 시간대와 관련이 없으며, 단순히 날짜 정보만을 저장합니다.

따라서, 시간대에 따른 변동성이 없습니다.

- DATETIME : DATETIME 타입은 시간대 정보를 포함하지 않지만, 애플리케이션에서 시간대를 고려하여 처리해야 할 필요가 있습니다.

예를 들어, 사용자가 다른 시간대에 있을 경우, DATETIME 값을 변환하여 표시해야 할 수 있습니다.



6. 함수 및 연산MySQL에서는 DATE와 DATETIME에 대해 다양한 함수와 연산을 제공합니다.

DATE 타입에 대한 함수는 주로 날짜 관련 연산에 초점을 맞추고 있으며, DATETIME 타입에 대한 함수는 시간과 관련된 연산을 포함합니다.

예를 들어, DATE_FORMAT() 함수는 DATE와 DATETIME 모두에 사용할 수 있지만, DATETIME의 경우 시간 정보도 포맷팅할 수 있습니다.

결론MySQL에서 DATE와 DATETIME은 각각의 용도에 맞게 설계된 데이터 타입입니다.

DATE는 날짜만 필요할 때 사용하며, DATETIME은 날짜와 시간이 모두 필요할 때 사용합니다.

데이터베이스 설계 시 이 두 타입의 차이를 이해하고, 적절한 타입을 선택하는 것이 중요합니다.

이를 통해 데이터의 정확성을 유지하고, 쿼리 성능을 최적화할 수 있습니다.

작성자: 김하린 [비회원] | 작성일자: 1년 전 2024-09-06 13:11:07
조회수: 228 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.