MySQL에서 데이터를 다루다 보면 테이블에 저장된 빈 문자열('')을 NULL 값으로 변경해야 하는 경우가 자주 발생합니다. 이럴 때는 LENGTH() 함수를 활용하면 간단하게 해결할 수 있습니다.
핵심 원리: LENGTH() 함수 활용하기
LENGTH() 함수는 문자열의 길이를 반환합니다. 따라서 길이가 0이라는 것은 해당 문자열이 비어 있다는 의미입니다. 이 조건으로 빈 문자열을 찾은 뒤, UPDATE 문의 SET 절을 사용하여 NULL로 변경하면 됩니다.
전체 과정을 예제와 함께 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(50)
);
Query OK, 0 rows affected (0.68 sec)
2단계: 샘플 데이터 삽입하기
INSERT 명령을 사용하여 일반 문자열과 빈 문자열을 함께 입력합니다.
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('');
Query OK, 1 row affected (0.15 sec)
'Chris'와 'David'라는 정상적인 값 두 개, 그리고 빈 문자열 두 개가 저장되었습니다.
3단계: 현재 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Chris | | | | David | | | +-------+ 4 rows in set (0.00 sec)
Name 컬럼에 빈 문자열이 포함되어 있는 것을 확인할 수 있습니다.
4단계: 빈 문자열을 NULL로 업데이트하기
다음 쿼리를 사용하면 빈 문자열을 NULL 값으로 한 번에 업데이트할 수 있습니다.
mysql> update DemoTable set Name=NULL where length(Name)=0; Query OK, 2 rows affected (0.12 sec) Rows matched: 2 Changed: 2 Warnings: 0
WHERE LENGTH(Name)=0 조건 덕분에 길이가 0인 행, 즉 빈 문자열이 저장된 행만 선택되어 NULL로 변경됩니다. 실행 결과, 총 2개의 행이 수정된 것을 볼 수 있습니다.
5단계: 업데이트 결과 검증하기
테이블을 다시 조회하여 변경 사항을 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과:
+-------+ | Name | +-------+ | Chris | | NULL | | David | | NULL | +-------+ 4 rows in set (0.00 sec)
기존에 빈 문자열이었던 두 행이 모두 NULL로 성공적으로 변경되었습니다.
정리 및 추가 팁
- LENGTH() = 0: 문자열의 실제 바이트 길이가 0인 경우를 찾습니다. 영문 데이터라면 문제없지만, UTF-8 환경에서 멀티바이트 문자를 다룰 때는
CHAR_LENGTH()를 사용하는 것이 더 안전합니다. - NULL과 빈 문자열은 서로 다른 값입니다. NULL은 '값이 없음'을 의미하고, 빈 문자열은 '길이가 0인 값이 존재함'을 의미하므로 데이터 설계 시 목적에 맞게 구분해서 사용해야 합니다.
- 여러 컬럼에 적용하려면
UPDATE 테이블명 SET col1=NULL, col2=NULL WHERE LENGTH(col1)=0 OR LENGTH(col2)=0;형태로 확장할 수 있습니다.
이처럼 LENGTH() 함수와 UPDATE 문만 있으면 복잡한 로직 없이도 MySQL에서 빈 문자열을 손쉽게 NULL로 변환할 수 있습니다.