MySQL에서는 UPDATE 문의 SET 절과 WHERE 절을 조합하면 빈 문자열('')을 NULL로 손쉽게 변환할 수 있습니다. 데이터 정합성을 위해 빈 값과 NULL을 구분해야 하는 경우에 유용한 방법입니다.
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1315
-> (
-> CountryName varchar(10)
-> );
Query OK, 0 rows affected (0.60 sec)
INSERT 명령어로 몇 개의 레코드를 삽입합니다. 이때 의도적으로 빈 값도 함께 입력하겠습니다.
mysql> insert into DemoTable1315 values('US');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1315 values('');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1315 values('UK');
Query OK, 1 row affected (0.70 sec)
mysql> insert into DemoTable1315 values('');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1315 values('');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1315 values('AUS');
Query OK, 1 row affected (0.14 sec)SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable1315;
출력 결과
+-------------+
| CountryName |
+-------------+
| US |
| |
| UK |
| |
| |
| AUS |
+-------------+
6 rows in set (0.00 sec)
위 결과에서 확인할 수 있듯이 세 개의 행에 빈 문자열이 저장되어 있습니다. 다음은 이 빈 값들을 NULL로 변환하는 쿼리입니다.
mysql> update DemoTable1315 set CountryName=NULL where CountryName='';
Query OK, 3 rows affected (0.16 sec)
Rows matched: 3 Changed: 3 Warnings: 0
WHERE 절에 CountryName='' 조건을 지정하여 빈 문자열인 행만 골라내고, SET 절에서 해당 컬럼 값을 NULL로 변경합니다. 실행 결과 3개의 행이 성공적으로 수정되었습니다.
변환이 제대로 적용되었는지 테이블을 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable1315;
출력 결과
+-------------+
| CountryName |
+-------------+
| US |
| NULL |
| UK |
| NULL |
| NULL |
| AUS |
+-------------+
6 rows in set (0.00 sec)
정리
빈 문자열과 NULL은 MySQL에서 서로 다른 값으로 취급됩니다. 따라서 WHERE CountryName='' 조건을 사용하면 빈 문자열만 정확히 필터링하여 NULL로 변환할 수 있습니다. 만약 공백만 포함된 값까지 처리하고 싶다면 TRIM(CountryName)='' 조건을 활용하는 것도 좋은 방법입니다.