NULL과 빈 문자열, 어떤 차이가 있을까?
데이터베이스에서 값을 저장할 때 NULL을 사용할지 빈 문자열('')을 사용할지는 데이터베이스 종류에 따라 달라집니다.
오라클(Oracle)의 경우, 빈 문자열을 입력하면 자동으로 NULL로 변환되기 때문에 두 개념이 사실상 동일하게 처리됩니다.
반면 MySQL에서는 NULL보다 빈 문자열을 사용하는 것이 더 유리합니다. 그 이유를 살펴보겠습니다.
MySQL에서 빈 문자열이 더 나은 이유
빈 문자열은 간단한 경계 조건만으로 손쉽게 확인할 수 있습니다. 예를 들어 WHERE column = ''처럼 비교 연산만으로 처리가 가능합니다.
하지만 NULL은 일반적인 비교 연산자(=, !=)로 판별할 수 없으며, 반드시 별도의 조건인 IS NULL 또는 IS NOT NULL을 추가로 작성해야 합니다. 이는 쿼리 작성 시 실수를 유발하기 쉽고 코드가 복잡해질 수 있습니다.
COUNT 함수로 확인하는 NULL과 빈 문자열의 차이
실제 예제를 통해 두 값의 동작 방식을 확인해 보겠습니다.
NULL의 COUNT 결과 확인:
mysql> SELECT count(NULL);
위 쿼리의 실행 결과는 다음과 같습니다.
+-----------------+ | count(NULL) | +-----------------+ | 0 | +-----------------+ 1 row in set (0.05 sec)
결과에서 알 수 있듯이 MySQL에서 count(NULL)의 값은 0입니다. 즉, NULL은 집계 함수에서 아예 계산 대상에서 제외됩니다.
빈 문자열의 COUNT 결과 확인:
mysql> SELECT count('');위 쿼리의 실행 결과는 다음과 같습니다.
+-----------+
| count('') |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)빈 문자열은 count()에서 1로 계산됩니다. 즉, 빈 문자열은 하나의 유효한 값으로 취급되는 반면, NULL은 '값이 없음'을 의미하여 집계에서 제외된다는 차이가 있습니다.
정리
- Oracle: 빈 문자열이 자동으로 NULL로 변환되므로 구분이 없습니다.
- MySQL: 빈 문자열 사용을 권장합니다. 단순 비교 조건으로 확인이 가능하고, 집계 함수에서도 정상적으로 계산됩니다.
- NULL: 별도의
IS NULL조건이 필요하며, COUNT 등의 집계 함수에서 제외됩니다.
따라서 MySQL에서 데이터의 부재를 명확히 표현해야 하는 특수한 경우가 아니라면, 빈 문자열을 활용하는 것이 조회와 관리 측면에서 더 효율적입니다.