[sql] Tinyint 대 Bit?

여기서 종교 전쟁을 시작하고 싶지는 않지만 데이터베이스에서 부울 값을 표현하는 방법에 대해 두 가지 생각이있는 것 같습니다. 어떤 사람들 bit은 적절한 데이터 유형 이라고 말하고 다른 사람들 tinyint은 더 낫다고 주장 합니다.

내가 아는 유일한 차이점은 다음과 같습니다.

  • bit: 저장 크기는 1 비트, 가능한 값은 0 또는 1입니다.
  • tinyint: 저장 크기는 1 바이트, 가능한 값은 0-255입니다.

부울 값을 표시해야 할 때 어떤 데이터 유형이 더 낫습니까? tinyint1보다 큰 값이 필요한 경우에 대비하여 추가 오버 헤드 가 가치가 있습니까?



답변

테이블에 비트 열을 추가하면 단일 비트가 아닌 각 레코드에서 전체 바이트를 차지합니다. 두 번째 비트 열을 추가하면 동일한 바이트에 저장됩니다. 아홉 번째 비트 열에는 두 번째 바이트의 저장 공간이 필요합니다. 1 비트 열이있는 테이블은 스토리지 이점을 얻지 못합니다.

Tinyint와 bit는 둘 다 작동하도록 만들 수 있으며, 둘 다 성공적으로 사용했으며 강한 선호도가 없습니다.


답변

비트 … 당신이 “참 / 거짓 / 파일을 찾을 수 없음”클랜에 속하지 않는 한

참조를받지 못한 경우 …

Linq2SQL의 경우 비트는 참 / 거짓으로 작동하므로 프로그래밍이 더 쉽습니다. 둘 다 장점이 있습니다.

또한 고려해야 할 프로그래밍 유지 관리도 있습니다. 귀하 (또는 중학교 인턴 프로그래머)가 2, 3, 25, 41, 167, 200 등을 사용하면 어떻게됩니까? 어디에 문서화되어 있습니까? 비트는 자체 문서화 되고 매우 보편적입니다.


답변

적절한 경우 비트를 사용합니다. 의미 론적으로 올바른 유형 (의미론 계산!) 외에도 단일 행 (어쨌든 SQL Server에서)에있는 여러 비트 필드 (최대 8 개)를 단일 바이트 저장소로 통합 할 수 있습니다. 8 번째 이후에는 다음 8 번째에 대해 추가 바이트가 필요합니다.

참조 :


답변

MySql 사용자의 경우-MySQL 에서 BIT 열을 사용하면 안되는 이유


답변

이전 StackOverflow 게시물 : MySQL에서 BIT와 TINYINT의 차이점은 무엇입니까?

새로운 “BOOL”열을 추가 할 때 MySQL은 실제로 TINYINT를 사용합니다.

나는 BOOL (일명 TINYINT )을 고수 하고 인생을 계속 진행할 것입니다.


답변

정의상 부울은 두 개의 값만 허용합니다. 이것을 위해 왜 하나 이상의 것이 필요합니까? 3 개 (또는 그 이상) 상태 논리가 필요한 경우 더 큰 데이터 유형을 사용하지만 표준 부울 논리에 대해 비트 필드를 계속 사용합니다.


답변

비트를 사용하면 검사 제약 조건을 사용할 필요가없고 ORM이 자동으로 비트를 nullable 부울 (C #)로 변환 할 수 있기 때문에 한 번 코딩하면 매우 감사합니다.