MySQL 에서 date, datetime 과 같은 날짜타입의 컬럼을 사용할때
데이터를 미정인 상태로 등록해야 될 때가 있다.
여러가지 사용예시를 보면서
미정인 날짜를 데이터로 지정시 주의할 점과
올바른 사용법을 소개하고자 한다.
개요
날짜타입 컬럼에 미정으로 데이터를 저장시
일반적으로는 ‘0000-00-00’ 이나 NULL 로 저장하는 방식이 있습니다.
이 2개를 비교하여 어떤 차이점이 있는지 살펴보려고 합니다.
1) 0000-00-00 으로 사용시
장점:
•
특정 범위 쿼리에서 유용: 0000-00-00을 포함하는 범위 쿼리를 작성하면, 모든 값이 포함된다는 점에서 편리할 수 있습니다. 예를 들어, BETWEEN '0000-00-00' AND '2024-05-17'는 모든 날짜를 포함합니다.
단점:
•
데이터 무결성 문제: 0000-00-00은 유효하지 않은 날짜로, 데이터 무결성에 문제가 생길 수 있습니다.
•
비표준 처리: 0000-00-00은 MySQL의 비표준 방식이며, 다른 DBMS에서는 지원되지 않거나 다른 방식으로 처리될 수 있습니다.
•
쿼리 오류 가능성: 0000-00-00을 사용하면 특정 함수나 연산에서 예외를 발생시킬 수 있습니다.
2) NULL 로 사용시
장점:
•
표준 준수: NULL은 SQL 표준에서 결측값을 나타내는 방법으로, 다른 DBMS에서도 일관되게 처리됩니다.
•
데이터 무결성 유지: NULL은 데이터 무결성을 유지하면서 날짜가 미정임을 명확하게 나타냅니다.
•
명확한 의미: NULL은 데이터가 존재하지 않음을 명확하게 나타냅니다.
단점:
•
특정 범위 쿼리에서 추가 조건 필요: NULL을 사용할 때 범위 쿼리를 작성할 때 추가 조건이 필요할 수 있습니다. 예를 들어, BETWEEN 연산자는 NULL 값을 포함하지 않으므로 별도의 IS NULL 조건이 필요합니다.
결론:
•
NULL을 사용하는 것이 더 좋은 방법: 데이터의 무결성을 유지하고, SQL 표준을 준수하며, 데이터베이스 간의 호환성을 높이는 데 도움이 됩니다.
•
특정 범위 쿼리 작성 시 추가 조건 사용: NULL을 사용할 때 범위 쿼리를 작성할 때는 NULL 값을 포함하는 추가 조건을 사용하는 것이 좋습니다.