NULL
및 비어있는 Varchar 값은 SQL Server에 저장됩니다. 그리고 UI에 string
필드에 대한 사용자 입력이없는 경우 NULL
또는 ''
을 저장해야하나요?SQL Server : Null VS 빈 문자열
답변
이 점에 대해 설명하는 멋진 문서 here이 있습니다. 중요한 것은 테이블 크기에 차이가 없다는 것입니다. 그러나 일부 사용자는 NULL 검사가 없으므로 쿼리를 더 쉽게 만들 수 있으므로 빈 문자열을 사용하는 것을 선호합니다. 문자열이 비어 있는지 확인하면됩니다. 주목해야 할 또 하나의 점은 관계형 데이터베이스의 맥락에서 NULL이 의미하는 것입니다. 문자 필드에 대한 포인터가 행 머리글에서 0x00으로 설정되므로 액세스 할 데이터가 없음을 의미합니다.
업데이트 실제로 행으로
각 행은 널 (null)을 허용하는 열에 대한 널 비트 맵을 가지고에 무슨 일이 일어나고 있는지에 대해 이야기 상세한 기사 here있다. 의 열이 null 인 경우 비트 맵의 비트는 1이고 그렇지 않으면 0입니다.
가변 크기 데이터 유형의 경우 실제 크기는 0 바이트입니다.
고정 크기 데이터 유형의 실제 크기는 기본 데이터 유형 크기 인 바이트 (기본값은 0, 숫자는 '')입니다.
DBCC 페이지의 결과는 모두 NULL과 빈 문자열은 0 바이트을 차지 모두 것을 보여준다.
실제로이 점에 대한 설명이 아닙니다. 그것은 정말로 그것을 백업 할 아무 것도없이 자신의 의견을 표현하는 누군가입니다. 그들이 제기 한 유일한 포인트는 공간 요구 사항이 동일하며 두 가지 방법 모두를 지원하지 않는다는 것입니다. – MikeKulls
행/열 단위로 수행되는 작업에 대한 자세한 정보를 제공하도록 업데이트되었습니다. – openshac
"또 다른 주목할 점은 관계형 데이터베이스의 컨텍스트에서 NULL이 의미하는 바는 문자 필드에 대한 포인터가 행 머리글에서 0x00으로 설정되므로 액세스 할 데이터가 없음을 의미합니다." NULL은 관계형 데이터베이스의 컨텍스트에서이를 의미하지는 않습니다. 특정 벤더가 관계형 데이터베이스를 구현할 때만 의미가 있습니다. – Thanatos
NULL
은 정의되지 않은 것처럼 값이 아닙니다. ''
은 0 자의 빈 문자열입니다.
데이터베이스의 문자열 값은 UI의 값에 따라 다르지만 일반적으로 쿼리 또는 저장 프로 시저에서 매개 변수를 지정하면 빈 문자열 ''
이됩니다.
빈 문자열은 길이가 0 인 문자 또는 문자가없는 문자열입니다. Null
에 데이터가 없습니다.
NULL 값은 모든 열의 특수 비트 맵 공간에 별도로 저장됩니다.
응용 프로그램에서 NULL
과 ''
을 구별하지 않으면 ''
을 테이블에 저장하는 것이 좋습니다 (단, 문자열 열이 외래 키인 경우에는 열을 금지하는 것이 더 좋을 수 있습니다). 빈 문자열을 저장하지 못하게하고 응용 프로그램의 논리와 호환되는 경우 NULL을 허용합니다.
"NULL"및 "빈 varchar"값은 SQL Server에 어떻게 저장됩니까? 왜 그 사실을 알고 싶습니까? 또는 다른 말로 대답을 알고 있다면 어떻게 그 정보를 사용하겠습니까?
내 UI에 문자열 필드에 대한 사용자 항목이없는 경우 NULL 또는 '?'를 저장해야합니까? 필드의 특성에 따라 다릅니다. 빈 문자열이 필드에 유효한 값인지 확인하십시오.
예를 들어 주소에 집 이름이 있으면 해당 주소가 집 이름이 없음을 알고 있는지 여부에 따라 저장할 수 있습니다.
사람의 이름과 같은 이름이 아닌 경우 사람이 공백 이름 (알고있는 한 모든 문화권에서)이 없기 때문에 null을 저장해야합니다.
나는 그것이 그렇게 중요하지 않다는 것을 알고있다. 그러나 나는 그것을 얻고 싶다. –
SQL Server에서 Null과 불일치를주의 깊게 확인하십시오. BLA가 null의 경우
select * from foo where bla <> 'something'
예를
를 들어레코드를 반환하지 않습니다. 논리적으로는 그렇지만.
그래서 확인하는 올바른 방법은 물론 사람들이 종종 잊어 버리고 이상한 버그를 얻을
select * from foo where isnull(bla,'') <> 'something'
될 것이다.
"null = null"이 false를 반환하지만 "null <> 'something' '"을 false로 반환하는 것은 완전히 잔인한 것으로 느껴질만큼 충분히 어렵습니다. – MikeTeeVee
@MikeTeeVee : 두 경우 모두 '거짓'이 아닙니다. 그것은 UNKNOWN이며 조건을 통과시키지 않습니다 (결과가 TRUE 일 때만). –
위의 쿼리는 약간 최적화 될 수 있으며 조금 더 빨라질 것입니다. isnull (bla, '')
외래 키 필드가 아닌 경우 빈 문자열을 사용하지 않으면 문제를 줄일 수 있습니다. 빈 문자열과 다른 것을 의미하기 위해 null을 취하는 경우에만 null을 허용합니다. 예를 들어 암호 필드가있는 경우 null 값은 새 사용자가 아직 암호를 만들지 않았 음을 나타내며 빈 varchar는 빈 암호를 나타낼 수 있습니다. null을 허용하는 "address2"와 같은 필드에 대해서만 생명을 어렵게 할 수 있습니다. Vagif Verdi가 언급 한 연산자 및 null 참조 및 예기치 않은 결과를 포함하여주의해야 할 사항은 종종 불필요한 프로그래머 오버 헤드입니다.
편집 : NULL 및 "빈 문자열"사이 Nullable vs. non-null varchar data types - which is faster for queries?
개념적 차이가 실제와 데이터베이스 설계에서 매우 중요하지만, 종종 잘못 이해하고 잘못 적용 - 여기에있다 : 성능은 문제가이 관련 질문을 참조하는 경우 두 가지에 대한 간단한 설명 :
NULL - 값이 무엇인지, 존재할 수도 있지만 존재하지 않을 수도 있음을 알지 못한다는 것을 의미합니다.
빈 문자열 - 값이 무엇인지 알지 못한다는 것을 의미합니다.
다음은 간단한 예제 : FIRST_NAME, middle_name 및 LAST_NAME에 대한 별도의 열을 포함하여 사람들의 이름을 가진 테이블이 있다고 가정 . first_name = 'John', last_name = 'Doe'및 middle_name 중간에있는 이름이 무엇인지, 또는 심지어 존재하는지 여부를 알 수 없다는 의미입니다. middle_name = ''(즉, 빈 문자열)과 같은 시나리오를 변경하면 중간 이름이 없음을 알 수 있습니다.
SQL Server 강사가 데이터베이스의 모든 문자 유형 열을 필수로 만드는 것을 홍보 한 다음 ''(빈 문자열) 또는 '알 수 없음'에 각각 DEFAULT VALUE를 할당하는 것을 들었습니다. 이 말을하면서 강사는 NULL과 빈 문자열의 차이점을 명확하게 이해하지 못했음을 보여주었습니다.틀림없이, 차이점은 혼란스럽게 보일 수 있지만, 위의 예제는 차이점을 명확히하는 데 도움이됩니다. 또한 SQL 코드를 작성할 때 차이점을 이해하고 빈 문자열뿐만 아니라 NULL도 적절하게 처리하는 것이 중요합니다.
할 수 있습니다. 이것은 보편적으로 객관적인 의견이 아니라는 점을 지적하고자한다. – industryworker3595112
여기서 NULL은 "unknown"을 의미하며 "nothing"/ "not applicable"을 의미하지는 않습니다. 그러나 다른 데이터 유형은 어떻습니까? 테이블에 CONTRACTS가 있고, DATE 유형의 "maturity_date"열이있는 경우 만기일이없는 계약이있는 경우 (예 : 요구 될 때까지 입금). 그런 경우에 그것을 다루는 꽤 받아 들여진 방법은 "maturity_date = NULL"로 남겨 두는 것입니다. (즉, 다른 모든 데이터 유형의 경우 NULL은 "nothing"/ "not applicable"의 경우 적절합니다.) (내 포인트 : null 대 빈 문자열 대 특수 값은 협약의 문제 일뿐입니다) – industryworker3595112
예, 동의해야합니다 이것은 둘의 단일 구현입니다. 합리적이지만 다른 구현도 있습니다. –
- 1. SQL Server 연결 문자열
- 2. 프록시 테이블 SQL Server vs SQL Server
- 3. C#/Oracle10g = null vs DBNull.Value vs String.Empty
- 4. DEFAULT를 사용하는 NULL 열 피하기 빈 문자열
- 5. 빈 문자열 열 대신 NULL 저장
- 6. C# : 인수 확인 : 널 (null)/빈 문자열
- 7. asp.net NULL 값을 ""(빈 문자열)로 변환하는 방법
- 8. SQL Server | 문자열 비교
- 9. SQL Server 사용자 vs 역할
- 10. null로 SQL Server 문자열 연결
- 11. null 문자열 종료 null
- 12. SQL Reporting Services 빈 문자열 처리
- 13. C++ null 문자열
- 14. SQL Server 2005에서 문자열 조작
- 15. SQL Server : 문자열 대 이진?
- 16. SQL Server 2005 SQL 인증 연결 문자열
- 17. SQL Server Nullable Column
- 18. SQL Server : NULL 값을 오늘 값으로 설정하십시오.
- 19. SQL Server 2005 - 비교에서 Null 사용
- 20. SQL Server 조인에 NULL 값 표시
- 21. SQL Server NULL 및 DEFAULT 열 지정
- 22. JSON 빈 문자열
- 23. SQL Server xQuery는 빈 대신 NULL을 반환합니다.
- 24. SQL Server 2000 sp? odbc vs OleDb
- 25. SQL Server : vs 또는?에서 선택하십시오.
- 26. SQL Server int vs nvarchar 성능 비교?
- 27. SQL Server 2008 : tinyint vs bit
- 28. SQL Server 2005의 Count (*) vs Count (Id)
- 29. django null과 빈 문자열
- 30. DevExpress Grid에서 null 대신 빈 문자열로 문자열 항목을 할당하는 방법
관련 항목 : [SQL : empty string vs NULL value] (http://programmers.stackexchange.com/q/32578/85530) –