MySQL에서 빈 문자열을 NULL로 변환하는 방법
MySQL에서는 NULLIF() 함수를 사용하여 빈 문자열('')을 NULL로 손쉽게 변환할 수 있습니다. 데이터 정제 작업이나 데이터 분석 시 빈 문자열과 NULL을 구분해야 하는 경우 이 방법이 특히 유용합니다.
NULLIF() 함수 기본 문법
SELECT NULLIF(컬럼명, '') AS 별칭 FROM 테이블명;
NULLIF(expr1, expr2) 함수는 두 인자가 서로 같으면 NULL을 반환하고, 다르면 첫 번째 인자의 값을 그대로 반환합니다.
즉, 위 문법에서 컬럼 값이 빈 문자열('')과 일치하면 결과는 항상 NULL이 됩니다. 반대로 컬럼 값이 이미 NULL인 경우에도 비교 결과가 성립하지 않으므로 역시 NULL이 유지됩니다. 덕분에 기존의 NULL 값에는 영향을 주지 않고 오직 빈 문자열만 NULL로 바꿀 수 있습니다.
예제 테이블 생성하기
실제 동작을 확인하기 위해 먼저 테스트용 테이블을 생성해 보겠습니다.
mysql> create table ConvertEmptyStringToNULL
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.63 sec)
테이블 생성 후, INSERT 명령으로 샘플 데이터를 입력합니다. 여기서는 일반 문자열, 빈 문자열, NULL 값을 의도적으로 섞어서 삽입했습니다.
mysql> insert into ConvertEmptyStringToNULL(Name) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values(NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('');
Query OK, 1 row affected (0.21 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values(NULL);
Query OK, 1 row affected (0.70 sec)
저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from ConvertEmptyStringToNULL;
실행 결과는 아래와 같습니다. Id 2와 4는 빈 문자열이며, Id 3과 6은 NULL 값입니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | | | 3 | NULL | | 4 | | | 5 | Carol | | 6 | NULL | +----+-------+ 6 rows in set (0.00 sec)
빈 문자열을 NULL로 변환하는 쿼리 실행
이제 NULLIF() 함수를 적용하여 빈 문자열을 NULL로 변환해 보겠습니다.
mysql> select NULLIF(Name,'') as EmptyStringNULL from ConvertEmptyStringToNULL;
아래 출력 결과에서 볼 수 있듯이, 원래 빈 문자열이던 값들이 모두 NULL로 표시됩니다. 기존의 NULL 값도 그대로 NULL로 유지되는 것을 확인할 수 있습니다.
+------------------+ | EmptyStringNULL | +------------------+ | John | | NULL | | NULL | | NULL | | Carol | | NULL | +------------------+ 6 rows in set (0.00 sec)
정리 및 추가 팁
MySQL은 자동으로 빈 문자열을 NULL로 변환하지 않지만, NULLIF() 함수를 활용하면 조회 시점에 간단하게 처리할 수 있습니다. 만약 테이블에 저장된 실제 데이터 자체를 변경하고 싶다면 UPDATE 문과 함께 사용할 수 있습니다.
UPDATE ConvertEmptyStringToNULL SET Name = NULL WHERE Name = '';
또한 공백이 포함된 문자열까지 함께 처리하려면 TRIM() 함수를 조합하면 더욱 확실한 데이터 정제가 가능합니다.
SELECT NULLIF(TRIM(Name), '') FROM ConvertEmptyStringToNULL;