나는이 주제가 논란의 여지가 있으며 인터넷에 떠 다니는 다양한 기사 / 의견이 많다는 것을 알고 있습니다. 불행히도, 대부분의 사람들은 NULL과 빈 문자열의 차이점이 무엇인지 알지 못한다고 가정합니다. 따라서 조인 / 집계로 놀라운 결과에 대해 이야기하고 일반적으로 좀 더 고급 SQL 레슨을 수행합니다. 이렇게함으로써, 그들은 요점을 절대로 그리워하지 않으므로 나에게는 쓸모가 없습니다. 희망적 으로이 질문과 모든 대답은 주제를 조금 앞으로 나아갈 것입니다.
열 중 하나가 varchar 유형의 전자 메일 주소 인 개인 정보 (이름, 출생 등)가있는 테이블이 있다고 가정합니다. 어떤 이유로 어떤 사람들은 이메일 주소를 제공하고 싶지 않을 수 있다고 가정합니다. 이러한 데이터 (이메일없이)를 테이블에 삽입 할 때 사용 가능한 두 가지 선택 사항이 있습니다. 셀을 NULL로 설정하거나 빈 문자열 ( '')로 설정하십시오. 하나의 솔루션을 다른 솔루션으로 선택하는 모든 기술적 의미를 알고 있다고 가정하고 두 시나리오에 대해 올바른 SQL 쿼리를 만들 수 있습니다. 문제는 두 값이 기술 수준에서 다르더라도 논리적 수준에서 정확히 동일합니다. NULL을보고 ''나는 한 가지 결론에 도달했습니다 : 나는 그 사람의 이메일 주소를 모른다. 아무리 노력해도 아무리 노력해도 NULL 또는 빈 문자열을 사용하여 전자 메일을 보낼 수 없었으므로 대부분의 SMTP 서버는 내 논리와 일치합니다. 따라서 값을 모르고 빈 문자열을 나쁜 것으로 간주하는 경우 NULL을 사용하는 경향이 있습니다.
동료들과의 격렬한 토론 후에 두 가지 질문이 나왔습니다.
알 수없는 값으로 빈 문자열을 사용하면 데이터베이스가 사실에 대해 "거짓"하게된다고 가정하는 것이 맞습니까? 더 정확하게 말하면, 가치가 무엇인지 아닌지에 대한 SQL의 아이디어를 사용하여 결론을 내릴 수 있습니다. 전자 메일 주소는 null이 아니라는 것을 알면됩니다. 그러나 나중에 전자 메일을 보내려고 할 때 모순되는 결론에 도달 할 것입니다. 아니요, 전자 메일 주소가 없습니다. @! # $ 데이터베이스가 거짓말을해야합니다!
빈 문자열 ''이 중요한 정보 (값과 값이 아닌)를 전달하는 좋은 방법이 될 수있는 논리적 시나리오가 있습니까? 때로는 실제 값과 NULL과 함께 빈 문자열을 사용하는 것이 좋다고 주장하는 많은 게시물을 보았지만 지금까지는 SQL / DB 디자인 측면에서 논리적 인 시나리오는 보지 못했습니다.
추신 : 어떤 사람들은 그것이 개인적인 취향의 문제라는 대답에 유혹을받을 것입니다. 동의하지 않습니다. 나에게 중요한 결과를 가진 디자인 결정입니다. 그래서 이것에 대한 의견이 논리 및 / 또는 기술적 인 이유에 의해 뒷받침되는 답변을보고 싶습니다.
''
오라클에서도와 동일하지 않습니다 NULL
. 예를 들어, 할당 CHAR(1)
값이 칼럼 ''
에서 발생한다 ' '
(즉, 공간)이 아니라 NULL
. 또한 Jacek이 Oracle을 사용하고 있다면이 질문도 나오지 않을 것입니다 :-)
'' IS NULL
평가 된 이후로 아직 다른 WTF true
입니다.