이름에서 알 수 있듯이 ALLOW_INVALID_DATES SQL 모드를 활성화하면 테이블에 유효하지 않은(잘못된) 날짜 값을 저장할 수 있습니다. 일반적으로 MySQL은 존재하지 않는 날짜, 예를 들어 11월 31일 같은 값을 입력하면 오류를 발생시키지만, 이 모드를 켜면 그러한 값도 그대로 저장됩니다.
사용 예시
먼저 SQL 모드를 ALLOW_INVALID_DATES로 설정한 후, 실제로 잘못된 날짜가 저장되는지 확인해 보겠습니다.
mysql> SET sql_mode = ALLOW_INVALID_DATES;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> Insert Into detail_bday(Name, Birth_Date) values('Sonia','1993-11-31');
Query OK, 1 row affected (0.09 sec)
mysql> Insert Into detail_bday(Name, Birth_Date) values('Ram','0000-00-00');
Query OK, 1 row affected (0.10 sec)
mysql> Select * from detail_bday;
+----+---------+------------+
| Sr | Name | Birth_Date |
+----+---------+------------+
| 1 | Saurabh | 1990-05-12 |
| 2 | Raman | 1993-06-11 |
| 3 | Gaurav | 1984-01-17 |
| 4 | Rahul | 1993-06-11 |
| 5 | Sonia | 1993-11-31 |
| 6 | Ram | 0000-00-00 |
+----+---------+------------+
6 rows in set (0.00 sec)결과 분석
위 결과 집합을 보면, ALLOW_INVALID_DATES SQL 모드를 활성화한 후 MySQL이 '1993-11-31'(존재하지 않는 날짜)와 '0000-00-00'(모든 값이 0인 날짜)처럼 원래는 유효하지 않은 날짜 값들을 오류 없이 정상적으로 저장한 것을 확인할 수 있습니다.
주의 사항
다만 이 모드는 날짜의 월 범위(1~12)와 일 범위(1~31)만 검증합니다. 즉, 월과 일의 숫자 범위만 맞으면 실제로 존재하지 않는 날짜라도 허용되며, 반대로 월이나 일 자체가 범위를 벗어나면 여전히 오류가 발생합니다. 또한 데이터 무결성 측면에서 잘못된 날짜가 저장될 수 있으므로, 특별한 이유가 없다면 기본값인 엄격 모드(STRICT 모드)를 유지하는 것이 권장됩니다.