programing

MySQL 정수 0 대 NULL

stoneblock 2023. 10. 16. 21:29

MySQL 정수 0 대 NULL

정수 열을 사용할 때 다음을 가지는 것이 더 나을까요.0아니면NULL값이 없음을 나타냅니다.

예를 들어, 만약 테이블에parent_id필드와 특정 항목에 부모가 없습니다.0아니면NULL?

나는 예전에 항상 사용했습니다.0, 제가 자바 세계에서 왔기 때문에 (1.5 이전에는) 정수는 항상 값을 가져야 했습니다.

저는 주로 실적과 관련하여 묻고 있는데, 어떤 것이 "더 정확한" 옵션인지 크게 걱정하지 않습니다.

사용.NULL다음 두 가지 이유로 사용하는 것이 경우

  1. NULL필드에 값이 없다는 의미로 사용되며, 이것이 바로 모델링하려는 것입니다.
  2. 나중에 참조 무결성 제약 조건을 추가하기로 결정한 경우 다음을 사용해야 합니다.NULL.

가능한 경우 열을 NOT NULL로 선언합니다.인덱스를 보다 효율적으로 사용하고 각 값이 NULL인지 여부를 테스트하는 오버헤드를 제거하여 SQL 작업을 보다 빠르게 수행할 수 있습니다. 또한 열당 1비트씩 스토리지 공간도 절약할 수 있습니다.테이블에 NULL 값이 필요한 경우 사용합니다.모든 열에서 NULL 값을 허용하는 기본 설정을 피하면 됩니다.

MySQL - 데이터 크기 최적화

"no value"에 NULL을 사용하는 것은 말 그대로 정확합니다.0은 정수에 대한 값이므로 의미가 있습니다.NULL ooth는 말 그대로 아무것도 없기 때문에 값이 없다는 뜻입니다.

성능은 무관할 수 있지만 NULL을 올바르게 사용하여 코딩하는 방법을 배운다면 NULL을 사용하는 것이 다소 빠를 수 있습니다.

parent_id에서 예제 0은 'root'을 의미하므로 완벽하게 유효합니다.대부분의 경우 논리적으로 'no value'를 선택하는 경우 NULL이 더 좋습니다.

하지만 제가 알고 있는 성능에는 영향이 없습니다.

당신은 이것과 실생활 수행의 차이를 기대해서는 안 됩니다.

UNIQUE( id1, id2 )예를 들어 다음을 허용하므로 null 값과 함께 작동하지 않습니다.1, null두번이라.

반면에 0을 사용한다면,JOIN atable ON this.extID = atable.ID조인이 실행되고(그 결과 조인된 행이 없음) NULL은 무시됩니다.

어쨌든 빈 값이 NULL과 다른 의미를 갖지 않는 한 항상 NULL 대신 "빈 값"(예: 0 또는 빈 문자열)을 사용하는 것을 제안합니다.

그리고 나는 다음과 같이 쿼리를 수정합니다.JOIN atable ON this.extID = atable.id AND extID > 0쓸모없는 조인을 실행할 수 없게 하는 것입니다.

실제로 0이 값으로 사용될 것으로 예상하지 않는다면 NULL 대신 0을 사용할 수 있다고 생각합니다.

예를 들어 당신의 칼럼은 외국어 키입니다.외래 키는 보통 0으로 시작하는 것이 아니라 1로 시작하기 때문에 0이 값으로 사용되는 것을 기대하지 않는다는 것을 의미합니다.

그런 다음 0을 사용하여 '아니오' 값 상태를 나타낼 수 있습니다.조인에 사용하면 다른 테이블의 열과 일치하지 않습니다.따라서 NULL과 동일한 효과를 갖습니다.

하지만 0이 실제로 의미를 가지는 열이 있다면요.예를 들어 수량 필드와 같습니다.그리고 그 외에도, 여러분은 또한 가치를 표현하고 비워야 합니다.예를 들어, 아직 수량이 입력되지 않았다는 것을 나타내기 위해서입니다.그럼 그것을 위해서 NULL이 필요합니다.

그게 말이 되기를 바랍니다.

0는 여전히 정수 열에 유효한 값입니다.다를 .NULL해당 열에 null을 허용합니다.

integer만 열을 다를 할 수 .-1위해서no치.

의 예를 ,parent_id:0, ID 로 ID 로 .0.

0을 선호하는 경우 Foreign 키를 사용할 수 없습니다. ID가 0인 Mysql 항목에 저장할 수 없으므로(기본인 경우), 가능한 유일한 방법은 null입니다.

언급URL : https://stackoverflow.com/questions/5015990/mysql-integer-0-vs-null