Development Tip

SQL Server : Null VS 빈 문자열

yourdevel 2020. 11. 27. 21:32
반응형

SQL Server : Null VS 빈 문자열


NULL빈 Varchar 값은 SQL Server에 어떻게 저장 됩니까 ? 그리고 stringUI필드에 대한 사용자 항목이없는 경우 에는 NULL또는 a를 저장해야 ''합니까?


여기 에이 점을 설명 하는 멋진 기사가 있습니다 . 제거해야 할 핵심 사항은 테이블 크기에 차이가 없다는 것입니다. 그러나 일부 사용자는 NULL 검사가 없기 때문에 쿼리를 더 쉽게 만들 수 있으므로 빈 문자열을 사용하는 것을 선호합니다. 문자열이 비어 있는지 확인하기 만하면됩니다. 주목해야 할 또 다른 사항은 관계형 데이터베이스에서 NULL이 의미하는 바입니다. 이는 문자 필드에 대한 포인터가 행 헤더에서 0x00으로 설정되어 있으므로 액세스 할 데이터가 없음을 의미합니다.

업데이트 실제로 행 단위로 일어나는 일에 대해 설명하는 자세한 기사가 있습니다.

각 행에는 널을 허용하는 열에 대한 널 비트 맵이 있습니다. 해당 열의 행이 널이면 비트 맵의 ​​비트가 1이고 그렇지 않으면 0입니다.

가변 크기 데이터 유형의 경우 acctual 크기는 0 바이트입니다.

고정 크기 데이터 유형의 경우 acctual 크기는 기본값으로 설정된 바이트 단위의 기본 데이터 유형 크기입니다 (숫자의 경우 0, 문자의 경우 '').

DBCC PAGE의 결과는 NULL과 빈 문자열이 모두 0 바이트를 차지함을 보여줍니다 .


SQL Server에서 Null 및 부등식 검사에주의하십시오.

예를 들면

select * from foo where bla <> 'something' 

bla가 null 인 레코드는 반환하지 않습니다. 논리적으로 그래야하지만.

따라서 확인하는 올바른 방법은

select * from foo where isnull(bla,'') <> 'something' 

물론 사람들은 종종 잊고 이상한 버그를 얻습니다.


빈 문자열은 길이가 0이거나 문자가없는 문자열입니다. Null데이터가 없습니다.


NULL과 "빈 문자열"의 개념적 차이점은 데이터베이스 설계에서 실제적이고 매우 중요하지만 종종 오해되고 부적절하게 적용됩니다. 다음은 두 가지에 대한 간단한 설명입니다.

NULL- 값이 무엇인지 모르고 존재할 수도 있지만 존재하지 않을 수도 있고 알 수 없음을 의미합니다.

빈 문자열 -값이 무엇인지 알고 있고 아무것도 아님을 의미합니다.

다음은 간단한 예입니다. first_name , middle_name , last_name에 대한 별도의 열을 포함하는 사람 이름이있는 테이블이 있다고 가정합니다 . first_name = 'John', last_name = 'Doe', middle_name이 NULL 인 시나리오에서는 중간 이름이 무엇인지 또는 존재하는지 알 수 없음을 의미합니다. 해당 시나리오를 middle_name = ''(즉, 빈 문자열)로 변경하면 중간 이름이 없다는 것을 알 수 있습니다.

SQL Server 강사가 데이터베이스의 모든 문자 유형 열을 필수로 만든 다음 ''(빈 문자열) 또는 '알 수 없음'각각에 DEFAULT VALUE를 할당하는 것을 홍보하는 것을 들었습니다. 이를 설명하면서 강사는 NULL과 빈 문자열의 차이를 명확하게 이해하지 못했다는 것을 보여주었습니다. 사실, 차이점이 혼란스러워 보일 수 있지만 위의 예는 차이점을 명확히하는 데 도움이됩니다. 또한 SQL 코드를 작성할 때 차이점을 이해하고 NULL 및 빈 문자열을 올바르게 처리하는 것이 중요합니다.


NULL 값은 모든 열에 대해 특수 비트 맵 공간에 별도로 저장됩니다.

당신이 구분하지 않는 경우 NULL''응용 프로그램에서, 그때 가게에 당신을 추천 할 것입니다 ''문자열 열이 외부 키가 아닌, (당신의 테이블에있는 경우 그것은 아마도 빈 문자열을 저장하는 열을 금지하는 것이 더하고 허용 것 애플리케이션의 논리와 호환되는 경우 NULL).


NULLundefined처럼 값이 아닙니다. ''0 개의 문자가있는 빈 문자열입니다.
데이터베이스의 문자열 값은 UI의 값에 따라 다르지만 일반적으로 ''쿼리 또는 저장 프로 시저에서 매개 변수를 지정하는 경우 빈 문자열 입니다.


외래 키 필드가 아닌 경우 빈 문자열을 사용하지 않으면 문제를 해결할 수 있습니다. null을 빈 문자열과 다른 의미로 사용하는 경우에만 null을 허용하십시오. 예를 들어 암호 필드가있는 경우 null 값은 새 사용자가 아직 암호를 만들지 않았 음을 나타내는 반면 빈 varchar는 빈 암호를 나타낼 수 있습니다. "address2"와 같은 필드의 경우 null을 허용하면 삶을 어렵게 만들 수 있습니다. 주의해야 할 것은 Vagif Verdi가 언급 한 = 및 <> 연산자의 null 참조와 예기치 않은 결과를 포함하며, 이러한 사항을주의하는 것은 종종 불필요한 프로그래머 오버 헤드입니다.

편집 : 성능이 문제인 경우이 관련 질문을 참조하십시오. Nullable vs. Null이 아닌 varchar 데이터 유형-쿼리에 더 빠릅니다?


"NULL"및 "빈 varchar"값은 SQL Server에 어떻게 저장됩니까? 왜 그걸 알고 싶습니까? 즉, 답을 안다면 그 정보를 어떻게 사용 하시겠습니까?

UI의 문자열 필드에 대한 사용자 항목이없는 경우 NULL 또는 ''를 저장해야합니까? 분야의 성격에 따라 다릅니다. 빈 문자열이 필드에 유효한 값인지 자문 해보십시오.

그럴 경우 (예 : 주소의 집 이름) 저장하려는 항목 일 수 있습니다 (주소에 집 이름이 없음을 알고 있는지 여부에 따라 다름).

그렇지 않은 경우 (예 : 사람의 이름), 사람들은 빈 이름이 없기 때문에 null을 저장해야합니다 (내가 아는 한 어떤 문화에서도).

참고 URL : https://stackoverflow.com/questions/5618357/sql-server-null-vs-empty-string

반응형