본문 바로가기
Oracle/운영

NULL값과 공백('')비교

by 취미툰 2020. 11. 28.
반응형

오라클은 NULL값과 공백('')값을 똑같이 NULL로 처리한다는 글을 본 적이 있습니다.

이것을 직접 확인하기 위해서 간단한 테스트를 진행해봤습니다.

 

a컬럼에 5개의 값을 넣을껀데 NULL값을 포함하여 공백('')과 공백사이에 띄어쓰기를 여러번한 값들(' ','  ','     ')을 같이 삽입하고 NULL로 분류가되는지 확인해보겠습니다.

--테이블 생성

create table unique_test
(a varchar2(10),
b varchar2(20),
c number
)
;


--데이터 삽입
insert into unique_test(a,b,c) values('','a',1);
insert into unique_test(a,b,c) values(' ','b',2);
insert into unique_test(a,b,c) values('   ','c',3);
insert into unique_test(a,b,c) values('         ','d',4);
insert into unique_test(a,b,c) values(null,'e',5);

 

 

확인

5건의 데이터를 삽입하고 null값인 것을 조회해보았을 때, 공백이 없는 값('')과 NULL로 삽입한 데이터가 조회되었습니다.

나머지 공백이 있는 값들은 데이터의 길이를 조회해본 결과, 길이가 나오고 있었고 결국 NULL 값이 아니라 길이가 있는 데이터 값이며, 공백의 숫자만큼의 값이 들어가 있는 값이 된다는 것입니다.

--NULL 값 확인
SQL> select * from unique_test where a is null;
A          B                    C          
---------- -------------------- -----------
           a                              1
           e                              5
           
           
--각 데이터값(a컬럼)의 길이 확인
SQL> select length(a),b.c from unique_test;
LENGTH(A)   B                    C          
----------- -------------------- -----------
            a                              1
          1 b                              2
          3 c                              3
          9 d                              4
            e                              5
            

 

결론 : NULL값과 공백이 없는 값('')은 동일하게 NULL입니다. 하지만 공백이 한칸이라도 있으면, 그 값은 NULL 이아니라 공백이 들어간 값이 되어 버립니다.

 

이 테스트는 티베로에서도 동일하게 수행하였고, 동일한 결과값이 나왔습니다. 티베로도 NULL값 사용시 공백이 없는 값('')으로 쓰거나 NULL로 사용하여야 합니다.

 

반응형

댓글