MySQL에서 빈 문자열('')과 NULL은 서로 다른 개념입니다. 빈 문자열은 실제로 값이 존재하는 것이고, NULL은 '값이 없음'을 의미합니다. 따라서 데이터 정합성을 위해 빈 값이나 공백만 들어있는 필드를 NULL로 변환해야 하는 경우가 종종 발생합니다.
이 글에서는 테이블에 저장된 빈 문자열 데이터를 UPDATE 쿼리를 이용해 NULL로 일괄 변경하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1362
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(40)
-> );
Query OK, 0 rows affected (0.67 sec)
2. 샘플 데이터 삽입
insert 명령을 사용하여 정상적인 이름, 빈 문자열(' '), 그리고 NULL 값을 포함한 다양한 레코드를 삽입합니다.
mysql> insert into DemoTable1362(ClientName) values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1362(ClientName) values(' ');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1362(ClientName) values('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1362(ClientName) values(' ');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1362(ClientName) values('David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1362(ClientName) values(NULL);
Query OK, 1 row affected (0.07 sec)3. 현재 데이터 확인
select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1362;
실행 결과는 다음과 같습니다.
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1 | Chris |
| 2 | |
| 3 | Bob |
| 4 | |
| 5 | David |
| 6 | NULL |
+----------+------------+
6 rows in set (0.00 sec)
ClientId가 2번과 4번인 레코드에는 빈 문자열(' ')이 저장되어 있고, 6번에는 NULL이 저장되어 있습니다.
4. 빈 값을 NULL로 변환하는 UPDATE 쿼리
빈 문자열 또는 길이가 0인 값을 가진 열 필드를 NULL로 처리하려면 아래와 같은 쿼리를 실행합니다.
mysql> update DemoTable1362
-> set ClientName=NULL
-> where ClientName='' or length(ClientName)=0;
Query OK, 2 rows affected (0.21 sec)
Rows matched: 2 Changed: 2 Warnings: 0
쿼리 설명:
ClientName='': 완전히 비어 있는 문자열을 찾습니다.length(ClientName)=0: 공백 등으로 인해 길이가 0인 값도 함께 처리합니다.- 조건에 해당하는 2개 행이 NULL로 변경되었습니다.
5. 변경 결과 확인
테이블의 레코드를 다시 한번 조회하여 변경 사항을 확인합니다.
mysql> select * from DemoTable1362;
실행 결과는 다음과 같습니다.
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1 | Chris |
| 2 | NULL |
| 3 | Bob |
| 4 | NULL |
| 5 | David |
| 6 | NULL |
+----------+------------+
6 rows in set (0.00 sec)
기존에 빈 문자열이었던 2번과 4번 레코드가 NULL로 성공적으로 변경된 것을 확인할 수 있습니다.
마무리
이처럼 UPDATE 문과 length() 함수를 조합하면 테이블 전체에서 빈 문자열 데이터를 손쉽게 NULL로 정리할 수 있습니다. NULL과 빈 문자열을 구분하지 않고 처리하면 조건 검색이나 집계 시 예상치 못한 오류가 발생할 수 있으므로, 데이터 입력 단계부터 일관된 규칙을 적용하는 것이 좋습니다.