MySQL에서 2월 30일과 같은 날짜 저장하기
MySQL 테이블에 2월 30일처럼 실제로 존재하지 않는 날짜를 저장하려면, 먼저 ALLOW_INVALID_DATES 모드를 활성화해야 합니다.
기본 상태에서의 오류
ALLOW_INVALID_DATES 모드를 활성화하지 않은 상태에서 이러한 날짜를 삽입하려고 하면 MySQL은 다음과 같은 오류를 반환합니다.
mysql> Insert into date_testing(date) values('2017-02-30');
ERROR 1292 (22007): Incorrect date value: '2017-02-30' for column
'Date' at row1ALLOW_INVALID_DATES 모드 활성화
이 문제를 해결하려면 아래와 같이 SQL 모드를 변경하여 ALLOW_INVALID_DATES를 활성화해야 합니다.
mysql> SET sql_mode = 'ALLOW_INVALID_DATES';
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into date_testing(date) values('2017-02-30');
Query OK, 1 row affected (0.14 sec)
mysql> select * from date_testing;
+------------+
| Date |
+------------+
| 2017-02-30 |
+------------+
1 row in set (0.00 sec)
위 쿼리를 실행한 후에는 2월 30일과 같은 유효하지 않은 날짜도 DATE 열에 정상적으로 삽입할 수 있습니다.
주의 사항
ALLOW_INVALID_DATES 모드는 세션 단위 또는 전역(Global)으로 설정할 수 있으며, 서버 재시작 시 설정이 초기화될 수 있습니다. 또한 이 모드는 날짜 형식 자체가 올바른지(예: 월은 1~12 범위)만 검증하므로, 데이터 무결성이 중요한 애플리케이션에서는 신중하게 사용하는 것이 좋습니다.