DATE
1. mySQL
- DATE : 날짜데이터만 표기
- TIME : 시간데이터만 표기
- DATETIME : 시간대가 반영되지 않은 현재 서버 시간대의 날짜와 시간 데이터 표기
- TIMESTAMP : 시간대가 반영된 날짜와 시간 데이터 표기
그래서 TIMESTAMP로만 사용하면 DB 저장시 UTC(+00:00) 으로 저장이 된다. - 그리고 기존 db에서 timestamp <-> datetime을 생성 이후에 변경하면 해당 컬럼의 시간이 전부 변경시점의 시간으로 일괄 변경되기때문에 주의해야한다.
datetime
사람이 읽을 수 있는 형태로 날짜와 시간을 표현
- 형식: datetime은 날짜와 시간을 'YYYY-MM-DD HH:MM:SS' 형식으로 저장합니다.
- 범위: datetime은 보통 1000년부터 9999년까지의 범위를 지원합니다.
- 시간대: datetime은 시간대를 저장하지 않습니다. 저장된 날짜와 시간은 절대적이며, 특정 시간대와 관련이 없습니다.
- 정밀도: 날짜와 시간의 정확성을 제공하며, 밀리초 단위까지 지원할 수 있는 경우도 있습니다.
- 사용 예: 사용자가 입력한 특정 날짜와 시간, 이벤트의 발생 시점 등.
- 명확한 날짜와 시간 기록: datetime은 인간이 읽기 쉬운 형식으로 날짜와 시간을 저장합니다. 이는 이벤트가 발생한 정확한 시점을 명확하게 기록하는 데 유용합니다.
- 시간대 무시: datetime은 시간대를 무시하고 절대적 날짜와 시간을 저장하므로, 애플리케이션이 시간대에 따라 다르게 표시될 필요가 없는 경우에 유리합니다.
- 장기적인 범위: datetime은 넓은 범위의 날짜를 지원하므로, 장기적으로 데이터를 저장하는 데 적합합니다.
timestamp
1970년 1월 1일 00:00:00 UTC(Unix Epoch Time) 를 기준으로 몇 초가 지났는지를 나타내는 숫자
- 형식: timestamp는 Unix 타임스탬프 형식으로 저장되며, 보통 1970년 1월 1일 00:00:00 UTC부터 경과된 초 수로 저장됩니다.
- 범위: timestamp는 일반적으로 1970년부터 2038년까지의 범위를 지원합니다 (32비트 시스템에서는 2038년 문제에 직면할 수 있음).
- 시간대: timestamp는 시간대를 저장합니다. UTC로 저장된 후, 데이터베이스가 로컬 시간대로 자동 변환합니다.
- 정밀도: 초 단위로 저장되며, 일부 시스템에서는 밀리초 단위까지 지원합니다.
- 사용 예: 데이터의 생성 또는 수정 시간 기록, 로그 이벤트 타임스탬프 등.
-
- 시간대 문제: timestamp는 UTC로 저장되기 때문에, 사용자가 보는 시간대와 서버의 시간대가 다를 수 있습니다. 이는 특히 애플리케이션의 여러 지역 사용자와 관련된 경우 복잡할 수 있습니다.
- 범위 제한: timestamp는 1970년부터 2038년까지의 범위를 가지므로, 그 범위를 넘어서는 경우에는 문제를 일으킬 수 있습니다 (현재 대부분의 시스템은 64비트로 이 문제를 해결하고 있지만).
- created_at 필드에는 datetime이 더 적합합니다. 이는 날짜와 시간이 명확하게 저장되고, 시간대에 따른 문제 없이 데이터를 관리할 수 있기 때문입니다.
- timestamp는 로그 데이터나 짧은 시간 범위의 데이터, 시간대 변환이 필요한 경우에 더 적합할 수 있습니다.
'ToyProject' 카테고리의 다른 글
| nestJS 실시간 채팅 앱 - [Fin] 도메인 (1) | 2025.01.01 |
|---|---|
| [TIL, 마루톡] 20241216 (Jest, Repository, Docker Volume, JWT refactoring) (1) | 2024.12.16 |
| nestJS 실시간 채팅 앱 - [8] trouble shooting 2 (0) | 2024.12.07 |
| nestJS 실시간 채팅 앱 - [7] 서버, (trouble shooting) (3) | 2024.12.05 |
| nestJS 실시간 채팅 앱 - [1] (1) | 2024.11.12 |