SQL INSERT CSV 변환: NULL·빈값 구분법

SQL INSERT문을 CSV로 옮길 때 NULL과 빈 문자열('')은 흔히 똑같은 '빈 칸'으로 보여서 나중에 어떤 값이 원래 없었는지, 어떤 값이 일부러 빈 문자열로 저장된 건지 구분이 안 되는 문제가 생깁니다. 이 둘은 SQL에서는 분명히 다른 값이지만, 규칙 없이 옮기면 CSV 단계에서 그 정보가 사라집니다. 아래에서 수작업으로 구분하는 규칙과, 변환 결과에서도 이 구분이 지켜지는지 확인하는 방법을 정리합니다.
요약 ① SQL에서 따옴표 없는 NULL과 따옴표만 있는 빈 문자열 ''은 원래 서로 다른 값입니다. ② 옮길 때 NULL은 글자 그대로 남기고, 빈 문자열은 진짜 빈 칸으로 남겨야 나중에 구분됩니다. ③ 변환한 CSV를 다시 불러오는 프로그램의 결측치 처리 설정도 함께 확인해야 합니다.
문제
회원 테이블을 CSV로 뽑는다고 가정해봅니다. 어떤 회원은 가입 시 이메일 항목을 아예 입력하지 않아 값이 NULL로 남았고, 다른 회원은 앱 로직상 빈 문자열 ''로 저장됐습니다. 두 값 모두 "이메일이 없다"는 점은 비슷해 보이지만, 데이터베이스 관점에서는 하나는 '값 자체가 없음'이고 다른 하나는 '빈 문자열이라는 값이 있음'으로 서로 다릅니다.
CSV로 옮길 때 이 구분 없이 둘 다 빈 칸으로 처리해버리면, 이 CSV만 보고는 어떤 회원이 NULL이었는지 빈 문자열이었는지 알 방법이 없습니다. 원본 SQL을 다시 열어보지 않는 이상 되돌릴 수 없는 정보 손실입니다.
특히 데이터를 다른 시스템으로 옮기거나 테스트용 샘플 데이터를 만들 때, 또는 특정 값이 비어 있는 행만 걸러내는 작업을 할 때 이 구분이 없으면 필터링 기준 자체를 세우기 어려워집니다.
해결
SQL 문법에서 두 값은 쓰는 방식부터 다릅니다. 따옴표 없이 그냥 NULL이라고 적혀 있으면 값이 없다는 뜻의 키워드이고, 따옴표 두 개만 붙어 있는 ''는 길이가 0인 문자열이라는 실제 값입니다. 이 차이를 CSV로 옮길 때도 그대로 유지하면 구분이 사라지지 않습니다.
손으로 옮길 때는 다음 순서를 따르면 됩니다.
- VALUES 뒤 괄호 안 값을 콤마 기준으로 나눕니다(따옴표 안의 콤마는 무시합니다).
- 값이 따옴표 없이 NULL이라고만 쓰여 있으면 CSV 칸에
NULL이라는 글자를 그대로 남깁니다. - 값이 따옴표 두 개만 붙어 있으면(
'') CSV 칸을 진짜 아무 글자도 없는 빈 칸으로 둡니다. - 옮긴 결과에서 콤마 개수가 원래 컬럼 수보다 하나 적은지 세어봅니다. 빈 칸이 중간에서 사라지면 콤마 개수가 줄어듭니다.
참고로 MySQL의 LOAD DATA / SELECT ... INTO OUTFILE은 NULL을 \N이라는 별도 표시로 내보내는 방식을 기본으로 씁니다. NULL을 빈 칸이 아니라 눈에 보이는 별도 표시로 남겨야 한다는 규칙은 SQL 생태계에서도 이미 쓰이고 있는 방식입니다.
이 규칙대로 변환됐는지 저희 도구로 확인해보세요.
SQL INSERT문을 붙여넣으면 NULL과 빈 문자열을 구분한 CSV로 바로 변환해 드립니다.

자주 막히는 지점
| 상황 | 확인할 점 |
|---|---|
| INSERT INTO 뒤에 컬럼 목록이 없음 | 헤더 행 없이 값만 변환되어 몇 번째 칸이 어떤 항목인지 알 수 없습니다 |
문자열 값이 우연히 'NULL'(따옴표 포함)인 경우 | 따옴표가 벗겨지면서 진짜 NULL과 똑같은 글자 NULL로 보입니다 |
| INSERT문 여러 개를 한 번에 붙여넣음 | 첫 VALUES 이후 텍스트를 통째로 괄호 단위로 읽어, 다음 문장의 컬럼 목록 괄호까지 데이터 행으로 잘못 읽힐 수 있습니다 |
| 콤마 대신 다른 구분자를 선택 | 값 안에 그 구분자와 같은 문자가 있으면 자동으로 큰따옴표로 묶여 출력됩니다 |
| 변환한 CSV를 엑셀·판다스 등으로 다시 불러올 때 | 프로그램 기본 설정이 빈 칸과 NULL 글자를 둘 다 결측치로 합쳐 인식할 수 있어, 불러오기 옵션을 따로 확인해야 합니다 |
정리
NULL과 빈 문자열은 SQL에서는 다른 값이고, CSV로 옮길 때도 이 차이를 그대로 남겨야 나중에 구분할 수 있습니다. NULL은 글자 그대로, 빈 문자열은 진짜 빈 칸으로 남기는 규칙만 지키면 수작업으로도 확인할 수 있고, 변환 결과를 다시 불러오는 프로그램의 결측치 설정까지 확인하면 정보가 끝까지 유지됩니다.
SQL INSERT문을 붙여넣으면 NULL과 빈 문자열을 구분한 CSV로 바로 변환해 드립니다.
자주 묻는 질문
NULL을 빈 칸으로 바꾸고 싶으면 어떻게 하나요?
이 도구는 SQL에 적힌 NULL이라는 글자를 그대로 CSV 칸에 옮기는 방식입니다. 빈 칸으로 바꾸고 싶다면 변환된 CSV를 받은 뒤 텍스트 편집기나 스프레드시트의 찾기/바꾸기로 NULL 글자만 지우면 됩니다. 다만 원래 따옴표로 감싸인 문자열 'NULL'과 육안으로 구분이 안 되니, 헷갈리는 행은 원본 SQL과 대조해보는 걸 권장합니다.
컬럼명 없이 저장된 INSERT문도 변환되나요?
값만 변환됩니다. 다만 헤더가 없으면 몇 번째 칸이 어떤 컬럼인지 알 수 없어 NULL과 빈 문자열이 어떤 항목에서 나온 값인지 헷갈리기 쉽습니다. 가능하면 원본 INSERT문에 컬럼 목록을 채워 넣고 변환하는 걸 권장합니다.
INSERT문 여러 개를 한 번에 붙여넣어도 되나요?
한 번에 하나씩 변환하는 걸 권장합니다. 여러 INSERT문을 이어 붙이면 첫 번째 VALUES 뒤 텍스트를 전부 훑어 괄호 단위로 값을 읽기 때문에, 두 번째 문장의 컬럼 목록 괄호까지 데이터 행으로 잘못 섞여 들어갈 수 있습니다.
