SQL Server: Null VS 빈 문자열
어게?는 어때요?NULL
및 빈 Varchar 값이 SQL Server에 저장됩니다.사용자 엔트리가 없는 경우string
내 UI의 필드, 저장해야 합니까?NULL
★★★''
여기에 이 점을 논하는 좋은 기사가 있다.중요한 점은 테이블크기에 차이가 없다는 것입니다만, 일부 사용자는 빈 문자열을 사용하면 NULL 체크가 없기 때문에 쿼리를 쉽게 할 수 있기 때문에 빈 문자열을 사용하면 쿼리를 쉽게 할 수 있기 때문입니다.문자열이 비어 있는지 확인만 하면 됩니다.또 하나 주의할 점은 릴레이셔널 데이터베이스의 컨텍스트에서 NULL이 의미하는 것입니다.즉, 행의 헤더에서 문자 필드에 대한 포인터가 0x00으로 설정되므로 액세스할 데이터가 없습니다.
업데이트 실제로 어떤 일이 일어나고 있는지에 대한 자세한 내용은 여기를 참조하십시오.
각 행에는 null을 허용하는 열에 대한 null 비트맵이 있습니다.이 열의 행이 null이면 비트맵의 비트가 1이고 그렇지 않으면 0입니다.
가변 크기 데이터 유형의 경우 실제 크기는 0바이트입니다.
고정 사이즈 데이터 타입의 경우, acctual size는 디폴트치로 설정된 바이트 단위의 데이터 타입 사이즈입니다(숫자는 0, 문자는 ").
DBCC PAGE의 결과는 NULL 문자열과 빈 문자열이 모두 0바이트를 차지함을 나타냅니다.
null에 주의하고 SQL 서버에서 불평등을 확인합니다.
예를들면
select * from foo where bla <> 'something'
bla가 null인 경우 레코드는 반환되지 않습니다.논리적으로는 그래야 하지만요
그래서 확인하는 올바른 방법은
select * from foo where isnull(bla,'') <> 'something'
물론 사람들은 자주 잊어버리고 이상한 벌레가 생기죠.
NULL과 "빈 문자열"의 개념적인 차이는 데이터베이스 설계에서 매우 중요하지만 종종 잘못 이해되고 잘못 적용되는 경우가 있습니다.다음 두 가지 간단한 설명을 제시하겠습니다.
NULL - 값이 무엇인지 알 수 없으며, 존재할 수 있지만 존재하지 않을 수 있습니다.그냥 알 수 없습니다.
Empty-String - 값이 무엇이고 아무것도 아님을 알 수 있습니다.
다음은 간단한 예입니다.first_name, middle_name 및 last_name에 대한 개별 열을 포함하여 사용자 이름이 포함된 테이블이 있다고 가정합니다.first_name = 'John', last_name = 'Doe', middle_name IS NULL의 시나리오에서는 중간 이름이 무엇인지 알 수 없거나 존재하는지조차 알 수 없습니다.이 시나리오를 middle_name = " (즉, 빈 문자열)로 변경하면 중간 이름이 없음을 알 수 있습니다.
SQL Server 강사가 데이터베이스의 모든 문자 유형 열을 필수 항목으로 만들고 "" (빈 문자열) 또는 "unknown" 각각에 DEFAULT VALUE를 할당하는 프로모션을 수행한 적이 있습니다.강사는 이를 언급하면서 NULL과 빈 문자열의 차이를 명확하게 이해하지 못했음을 입증했습니다.물론, 그 차이는 혼란스러워 보일 수 있지만, 위의 예는 그 차이를 명확히 하는 데 도움이 됩니다.또한 SQL 코드를 작성할 때 차이를 이해하고 빈 문자열뿐만 아니라 NULL에 대해서도 적절하게 처리하는 것이 중요합니다.
빈 문자열은 길이가 0이거나 문자가 없는 문자열입니다. Null
데이터가 없습니다.
NULL 값은 모든 열에 대해 특별한 비트맵 공간에 별도로 저장됩니다.
「 」를 .NULL
★★★★★★★★★★★★★★★★★」''
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★''
테이블(스트링 컬럼이 외부 키가 아닌 경우, 이 경우 컬럼에 빈 문자열을 저장하는 것을 금지하고 응용 프로그램의 로직과 호환되는 경우 NULL을 허용하는 것이 좋습니다).
NULL
을 사용법 ''
0은 0으로 하다.
값은 에 따라 빈 입니다.''
쿼리 또는 저장 프로시저에서 매개 변수를 지정한 경우.
외부 키 필드가 아닌 경우 빈 문자열을 사용하지 않으면 문제를 줄일 수 있습니다.null을 빈 문자열과 다른 의미로 사용할 경우에만 null을 허용합니다.예를 들어 비밀번호 필드가 있는 경우 null 값은 신규 사용자가 아직 비밀번호를 작성하지 않은 것을 나타내고 빈 varchar는 빈 비밀번호를 나타낼 수 있습니다."address2"와 같은 필드에 null을 허용하면 생활이 어려워질 수 있습니다.주의해야 할 것은 Vagif Verdi가 언급한 = 및 <> 운영자의 null 참조 및 예기치 않은 결과이며, 이러한 사항을 주의하는 것은 종종 불필요한 프로그래머 오버헤드입니다.
편집: 퍼포먼스에 문제가 있는 경우는, 다음의 관련 질문을 참조해 주세요.nullable vs null varchar 데이터 유형 - 쿼리가 빠른 것은 무엇입니까?
가지고 있다는 점에서는something
VARCHAR 열의 값에 무엇이 포함되는지 여부에 관계없이 내가 결정하는 데 사용할 함수를 작성했습니다.
CREATE FUNCTION [dbo].[ISNULLEMPTY](@X VARCHAR(MAX))
RETURNS BIT AS
BEGIN
DECLARE @result AS BIT
IF @X IS NOT NULL AND LEN(@X) > 0
SET @result = 0
ELSE
SET @result = 1
RETURN @result
END
이제 의심의 여지가 없다.
SQL Server에 저장되는 "NULL" 및 "empty varchar" 값은 어떻게 됩니까?왜 그걸 알고 싶어하죠?즉, 답을 알고 있다면 그 정보를 어떻게 사용하시겠습니까?
또한 UI의 문자열 필드에 사용자 입력이 없는 경우 NULL 또는 '를 저장해야 합니까?그건 당신 분야의 특성에 따라 달라요.빈 문자열이 필드에 유효한 값인지 자문해 보십시오.
주소의 하우스명 등)의 경우는, 그 주소에 하우스명이 없는 것을 알고 있는지 아닌지에 따라서, 보존할 수 있습니다.
그렇지 않은 경우(예를 들어, 사람의 이름)에는 공백이 없기 때문에(제가 아는 한) 늘을 저장해야 합니다.
언급URL : https://stackoverflow.com/questions/5618357/sql-server-null-vs-empty-string
'programing' 카테고리의 다른 글
셸 명령이 완료될 때까지 기다립니다. (0) | 2023.04.10 |
---|---|
C#에서는 문자열을 사용해야 합니까?[ Empty ]또는 [String]입니다.문자열을 초기화하려면 비워두시겠습니까? 아니면 " "? (0) | 2023.04.10 |
Swift에서 URL 인코딩 방법 (0) | 2023.04.10 |
merge --squash와 rebase의 차이점은 무엇입니까? (0) | 2023.04.10 |
iOS에서 바코드를 스캔하려면 어떻게 해야 합니까? (0) | 2023.04.10 |