MySQL에서 '0000-00-00' 날짜 값 저장하기
MySQL 테이블의 DATE 타입 컬럼에 '0000-00-00'처럼 실제로 존재하지 않는 날짜를 저장하려면, 먼저 SQL 모드를 allow_invalid_dates로 설정해야 합니다. 기본 설정에서는 이러한 값이 허용되지 않아 오류가 발생하지만, SQL 모드를 변경하면 정상적으로 저장할 수 있습니다.
설정 및 저장 예제
다음 예제는 SQL 모드를 변경한 후 유효하지 않은 날짜를 저장하는 전체 과정을 보여줍니다.
mysql> SET sql_mode = 'allow_invalid_dates';
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> CREATE TABLE test_date(date_order date);
Query OK, 0 rows affected (0.45 sec)
mysql> INSERT INTO test_date(date_order) VALUES('0000-00-00');
Query OK, 1 row affected (0.04 sec)
mysql> SELECT * FROM test_date;
+------------+
| date_order |
+------------+
| 0000-00-00 |
+------------+
1 row in set (0.00 sec)단계별 설명
1. SQL 모드 변경: SET sql_mode = 'allow_invalid_dates' 명령으로 현재 세션에서 유효하지 않은 날짜 입력을 허용합니다.
2. 테이블 생성: DATE 타입의 date_order 컬럼을 가진 테이블을 생성합니다.
3. 데이터 삽입: '0000-00-00' 값을 그대로 INSERT 하면 오류 없이 저장됩니다.
4. 결과 확인: SELECT 문으로 조회하면 '0000-00-00'이 그대로 출력되는 것을 확인할 수 있습니다.
주의 사항
allow_invalid_dates 모드는 월(1~12)과 일(1~31) 범위만 검증하며, 실제 존재하는 날짜인지까지 완전히 확인하지는 않습니다. 따라서 '2월 30일' 같은 값도 저장될 수 있습니다.
또한 위 설정은 현재 세션에만 적용되므로, 서버 재시작 후에도 유지하려면 MySQL 설정 파일(my.cnf 또는 my.ini)의 sql-mode 옵션에 ALLOW_INVALID_DATES를 추가하는 것이 좋습니다. 다만 애플리케이션 로직이나 다른 DBMS와의 호환성 문제가 발생할 수 있으므로, 가능하면 NULL 값이나 별도의 플래그 컬럼으로 '날짜 미지정' 상태를 표현하는 것이 더 안전한 설계 방식입니다.