Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 1970년 이전의 날짜를 다루는 방법 – DATE 타입 활용 가이드

MySQL에서 1970년 이전의 날짜를 다루는 방법

MySQL에서 1970년 이전의 날짜를 저장하거나 조회해야 한다면 DATE 데이터 타입을 사용해야 합니다. 자주 사용되는 TIMESTAMP 타입은 유닉스 타임스탬프 기준으로 인해 1970년 1월 1일부터 2038년까지만 표현할 수 있는 반면, DATE 타입은 1000년부터 9999년까지의 훨씬 넓은 범위를 지원하기 때문입니다.

DATE 타입은 시간 정보 없이 날짜(연·월·일)만 다룰 때 적합합니다.

DATE 타입의 기본 형식과 범위

MySQL의 DATE 타입은 아래와 같은 형식으로 데이터를 출력합니다.

'YYYY-MM-DD'

저장 가능한 날짜 범위는 다음과 같습니다.

최소값 : 1000-01-01
최대값 : 9999-12-31

예제 테이블 생성

설명한 내용을 직접 확인하기 위해 예제 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table DateDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> DateBefore1970 date
   -> );
Query OK, 0 rows affected (0.71 sec)

레코드 삽입과 범위 초과 시 동작

이제 INSERT 명령으로 여러 날짜를 입력해 보겠습니다. 주의할 점은, 허용된 최대 날짜인 '9999-12-31'을 벗어나는 값을 입력하면 MySQL이 오류를 발생시키지 않고 '0000-00-00'이라는 잘못된 날짜를 저장한다는 것입니다.

실제로 '9999-12-31'보다 큰 값('10000-12-31')도 함께 입력해 보겠습니다. 전체 쿼리는 다음과 같습니다.

mysql> insert into DateDemo(DateBefore1970) values('1000-10-20');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateDemo(DateBefore1970) values('1940-12-31');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DateDemo(DateBefore1970) values('1500-01-25');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DateDemo(DateBefore1970) values('1900-04-14');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DateDemo(DateBefore1970) values('1710-11-15');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateDemo(DateBefore1970) values('9999-12-31');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DateDemo(DateBefore1970) values('10000-12-31');
Query OK, 1 row affected, 1 warning (0.11 sec)

마지막 INSERT 문에서 경고(warning)가 발생한 것을 확인할 수 있습니다. 이는 입력한 연도가 DATE 타입의 최대 허용 범위를 초과했기 때문입니다.

저장된 결과 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DateDemo;

실행 결과는 다음과 같습니다.

+----+----------------+
| Id | DateBefore1970 |
+----+----------------+
|  1 | 1000-10-20     |
|  2 | 1940-12-31     |
|  3 | 1500-01-25     |
|  4 | 1900-04-14     |
|  5 | 1710-11-15     |
|  6 | 9999-12-31     |
|  7 | 0000-00-00     |
+----+----------------+
7 rows in set (0.00 sec)

결과를 보면 7번째 레코드('10000-12-31')가 유효 범위를 벗어나 '0000-00-00'으로 저장된 것을 알 수 있습니다. 따라서 과거의 오래된 날짜를 다룰 때는 반드시 DATE 타입을 사용하고, 입력 값이 허용 범위(1000-01-01 ~ 9999-12-31) 안에 있는지 애플리케이션 단계에서 미리 검증하는 것이 안전합니다.