본문 바로가기
프로그래밍/데이터베이스

데이터베이스에서 null 과 빈 문자열(empty string)의 차이점

by pentode 2018. 4. 20.

테이블의 NULL 허용 필드에 데이터를 넣을 때 빈 문자열(empty string)을 넣으면 어떻게 될까요? 아래의 두가지 쿼리가 어떻게 동작할지를 말하는 것입니다.


INSERT INTO tb_test (id, name) VALUES (1, NULL);
INERRT INTO tb_test (id, name) VALUES (2, '');


1. Oracle


오라클에서는 NULL과 빈문자열 '' 이 모두 NULL 로 처리 됩니다. 위에서 id 가 1, 2 인 행의 name은 모두 NULL 이 들어갑니다.


SELECT * FROM tb_test WHERE name IS NULL;


위와 같이 쿼리하면 id가 1, 2인 행이 모두 조회됩니다. 데이터베이스에서 NULL은 등호(=)로 비교할 수 없습니다. 반드시 IS NULL 또는 IS NOT NULL 을 사용해서 판별하여야 합니다.


값이 NULL인 문자열의 길이는 얼마가 나올까요?


SELECT LENGTH(name) FROM tb_test WHERE name IS NULL;


답은 NULL 입니다. 데이터베이스에서 NULL을 다룰 때는 항상 주의해야 합니다. 계산에 NULL 이 사용 되면 0처럼 동작하는것이 아니라 결과가 NULL이 되어 버립니다.



2. MySQL(MariaDB)와 SQLServer


MySQL(MariaDB)와 마이크로소프트의 SQLServer에서는 빈 문자열이 입력됩니다.


SELECT * FROM tb_test WHERE name = '';


위와 같이 조회 하면 id가 2인 행이 나옵니다.


SELECT * FROM tb_test WHERE name IS NULL;


이렇게 조회 하면 id가 1인 행이 나옵니다.



각각에서 빈 문자열 필드의 길이를 구해보면 0이 나오게 됩니다.


-- MySQL
SELECT LEN(name) FROM tb_test WHERE name = '';

-- SQLServer
SELECT LENGTH(name) FROM tb_test WHERE name = '';


데이터베이스 NULL 을 잘 다루는 것은 매우 중요합니다. 데이터베이스에서 값을 조회한 프로그램에서 오류를 낼 수 도 있고, 계산등에서 값이 맞지 않을 수도 있기 때문입니다.

반응형