2010-06-10 4 views
6

열에 NULL 값을 허용하면 일반적으로 값이 없어도됩니다. NVARCHAR을 사용할 때 열을 NULL으로 설정하지 않고 빈 문자열을 가질 가능성이 이미 있습니다. 대부분의 경우 NVARCHAR과 빈 문자열이 의미있는 차이가없고 해당 열의 값이 NULL 인 것을 볼 수 없습니다.(NOT) NVARCHAR 열의 경우 NULL

NOT NULL 코드에 NULL 값의 가능성을 처리하는 데에서 저를 저장하고 "아니오 값"(NULL 또는 빈 문자열)의 서로 다른 표현을하지 더 잘 느낌으로 열을 설정.

NVARCHAR 열을 NOT NULL으로 설정하여 다른 문제가 발생합니까? 공연? 저장소 크기? 클라이언트 코드에서 값의 사용법을 간과 한 사항이 있습니까?

+1

오라클은 귀하와 동의하며 빈 문자열을 null로 처리합니다. –

답변

3

NULL은 열의 값이 누락되었거나 적용 불가능 함을 나타냅니다. 빈 문자열은 실제 값이기 때문에 다릅니다. NULL에는 기술적으로 데이터 형식이 없습니다.이 경우 빈 문자열 (이 경우 nvarchar)이됩니다.

NULL 값이 아닌 기본값이있는 문제는 볼 수 없습니다. 당신이

예를 들어

Select Sum(TotalPrice) as 'TotalPrice' From myTable Where CountOfItems > 10 

훨씬 쉽게

Select Sum(IsNull(TotalPrice,0)) as 'TotalPrice' From myTable Where IsNull(CountOfItems,0) > 10 
보다 쿼리의에 NULL 값을 음식에 대해 걱정할 필요가 없습니다 것처럼 사실

, 아마 도움이 될 것입니다

DDL에 기본 제약 조건을 사용하여 데이터에 불량 문자 NULL이 나타나지 않도록해야합니다.

+3

-1'TotalPrice'가'NULL'이면, 어쨌든 집계에 포함되지 않을 것입니다. 'CountOfItems'가'NULL'이라면 어쨌든'> 10' 술어와 일치하지 않을 것입니다. 그래서이 둘은 중복되고 두 번째 것은 표현을 unsargable하게 만듭니다. 또한'SUM'보다는'AVG'를 사용한다면 어떨까요? 이제 더미 값은 결과를 부정확하게 만듭니다. –

3

NULL 값의 개념은 일반적인 혼동의 원천입니다. NULL은 이 아니며이며 빈 문자열 또는 0 값과 같습니다.

개념적으로 NULL은 "알 수없는 값이 누락되었습니다"를 의미하며 다른 값과는 다소 다르게 처리됩니다. 예를 들어 NULL을 테스트하려면 =, < 또는 <>과 같은 산술 비교 연산자를 사용할 수 없습니다.

"누락 된 알 수없는 값"이 포함될 수있는 열이있는 경우 NULL을 허용하도록 열을 설정해야합니다. 한편 빈 문자열은 단순히 값이으로 알려져 있음을 의미하지만 비어 있습니다.

예 : "사용자"테이블의 "중간 이름"필드가 NULL로 설정된 경우 해당 사용자의 중간 이름을 알 수 없음을 의미합니다. 사용자는 중간 이름을 가질 수도 있고 그렇지 않을 수도 있습니다. 그러나 "중간 이름"필드가 빈 문자열로 설정된 경우 사용자에게 중간 이름이없는 것으로 인식되어야합니다.

+0

예, 아니요, 응용 프로그램에 따라 다릅니다. 빈 문자열과 널 문자열에는 별도의 의미가 없거나 필요없는 특정 필드를 찾을 수있는 유스 케이스가 많이 있습니다. – Chalky

0

NULL을 허용하지 않으면 테이블을 사용하는 것이 더 쉬울 것이라고 말하고 싶습니다. 코드의 모든 곳에서 NULL을 확인할 필요가 없으므로 열만 설정하면됩니다. 빈 값보다 알 수없는 값을 처리해야하는 경우 NULL을 허용합니다.

0

ho1이 말한 바. 그러나 NOT NULL 열을 정의한 다음 '알 수 없음'에 대한 특수 값을 지정하는 것은 좋지 않습니다.

관련 문제