source

Tinyint vs Bit?

factcode 2022. 9. 22. 00:07
반응형

Tinyint vs Bit?

여기서 종교전쟁을 촉발하고 싶지는 않지만 데이터베이스에서 부울적 가치를 표현하는 방법에는 두 가지 생각의 학파가 있는 것 같습니다.라고 하는 사람도 있다bit적절한 데이터 타입이라고 주장하는 한편,tinyint더 좋아요.

제가 알고 있는 유일한 차이점은 다음과 같습니다.

  • bit: 스토리지 사이즈는 1비트, 가능한 값은 0 또는 1입니다.
  • tinyint: 스토리지 사이즈는 1바이트, 가능한 값은 0 ~255입니다.

부울 값을 표시해야 할 때 더 나은 데이터 유형은 무엇입니까?tinyint'만일의 경우에 대비해서' 가치가 있는 추가 오버헤드를 1보다 크게 할 필요가 있습니까?

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

Tinyint와 bit는 모두 사용할 수 있기 때문에 둘 다 잘 사용하고 있기 때문에 특별히 선호하는 것은 없습니다.

'진짜/허위/파일을 찾을 수 없음' 씨족이 아니라면

만약 당신이 추천서를 받지 못하셨다면...

또한 Linq2SQL의 경우 비트는 true/false와 연동되므로 프로그래밍이 용이합니다.둘 다 장점이 있다.

또한 프로그래밍 유지 보수도 고려해야 합니다.만약 당신(또는 주니어 인턴 프로그래머)이 2, 3, 25, 41, 167, 200 등을 사용한다면 어떻게 될까요?그건 어디에 기록돼 있나요?비트는 자체 문서화되어 있으며 상당히 보편적입니다.

나는 적당한 비트를 사용한다.의미론적으로 올바른 유형(의미 수!)인 것 외에, 1행(SQL Server에서는 최대 8개)의 여러 비트 필드를 1바이트의 스토리지로 통합할 수 있습니다.8번째 이후의 8번째 바이트에는 추가 바이트가 필요합니다.

참고 자료:

MySql 사용자의 경우 - B를 사용하지 않는 이유MySQL의 IT 열

이전 StackOverflow 투고:MySQL의 BIT와 TINYINT의 차이점은 무엇입니까?

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

난 그냥 BOOL(일명 TINYINT)과 함께 살아가고 싶다.

Boolean은 정의상 2개의 값만 허용합니다.왜 이걸 위해 1비트 이상의 것이 필요한 거죠?3개 이상의 스테이트 로직이 필요한 경우는, 보다 큰 데이터 타입을 사용합니다만, 표준 부울 로직의 경우는 비트필드를 사용합니다.

체크 제약 조건을 사용할 필요가 없어지고 ORM이 자동으로 비트를 Nullable Boolean(C#)으로 변환하기 때문에 비트를 사용하고 있습니다.이것은 코딩이 완료되면 매우 고맙게 생각합니다.

False를 위한 공백 없음

어떤 선택을 하셔도 됩니다.NULL대신0또한 추가 공간을 차지하지 않습니다(데이터베이스는 거의 항상NULL각 행의 모든 필드에 플래그를 붙입니다.자세한 내용은 여기를 참조해 주세요.디폴트값/가장 가능성이 높은 값도 확인합니다.false, 더 많은 공간을 절약할 수 있습니다!

True를 위한 일부 공간

나타낼 값true필드 유형으로 정의된 공간이 필요합니다.사용BIT는 8개의 필드당1바이트를 사용하기 때문에 테이블에 이러한 컬럼이 여러 개 있는 경우에만 공간을 절약합니다.TINYINT필드당 1바이트를 사용합니다).

TINYINT는 다수의 추가 컬럼을 관리하지 않고8 값 비트마스크를 커스터마이즈 할 수 있는 장점이 있습니다.또한 이론적으로는 검색이 고속입니다(단일 정수필드와 여러 비트필드 비교).그러나 순서가 느리고, 복잡한 교차 색인화 작업, 필드 이름 부족 등의 단점이 있습니다.어떤 비트가 어떤 비트마스크에서 어떤 작업을 수행했는지 기록하려면 외부 문서가 필요합니다.

어떤 경우든 사용의 유혹을 피한다.TEXT필드 또는 필드 세트를 저장합니다.텍스트 검색은 서버에서 훨씬 더 많은 작업을 수행하며, "on, off, off"와 같은 임의 명명 방식은 상호 운용성을 해칠 수 있습니다.

방금 비트(SQL Server 2k5)로 그룹화를 시도했는데 잘 작동했습니다.나는 응용 프로그램에 올바른 데이터 유형을 사용하는 것을 좋아한다.참/거짓 필드라면 비트는 제가 사용하는 것입니다.

이러한 이론적인 논의는 모두 훌륭하지만, 적어도 MySQL을 사용하는 경우나 SQL Server를 사용하는 경우에도 데이터를 출력하거나 쿼리하거나 할 때 사용하기 쉽기 때문에 부산을 위한 바이너리 이외의 데이터를 사용하는 것이 가장 좋습니다.MySQL과 SQL Server 간의 상호 운용성(즉, 데이터를 동기화하는 것)을 실현하려고 하는 경우, BIT 데이터형의 처리는 각각 다르기 때문에 특히 중요합니다.따라서 실제로 숫자 데이터 유형을 계속 사용하면 번거로움이 훨씬 줄어듭니다.MySQL은 TINYINT(1)로 저장되는 BOOL이나 BOUAL을 고수하는 것을 추천합니다.MySQL Workbench와 MySQL Administrator가 BIT 데이터 유형을 표시하는 방식도 좋지 않습니다(바이너리 데이터의 작은 기호).그러니 현실적이고 귀찮은 일은 피하세요(불행하게도 저는 경험에서 말하고 있습니다).

위에서 본 적이 없는 것 같습니다만, B를 집약할 수 없는 문제가 있습니다.IT컬럼(MIN, MAX, 특히 SUM 등)2008을 사용하여 테스트했는데 아직 문제가 해결되지 않았습니다.이것이 제가 최근에 tinyint를 사용하는 가장 큰 이유입니다.다른 하나는 제가 tinyint의 스케일을 좋아하기 때문입니다.- 당신의 "2-value" 비트 플래그가 갑자기 더 많은 가능한 값을 필요로 할 때 항상 괴롭습니다.

모든 테이블을 int "벡터" 필드로 작성합니다.그런 다음 이 필드를 임의의 목적으로 할당할 수 있는 32비트의 집합으로 사용합니다(상태 집합에 비트 그룹을 사용할 수 있습니다).잊은 경우 플래그 필드에 계속 추가할 필요가 없습니다.

@Kevin: 사용하실 수 있을 것 같습니다.group by비트 필드(SQL Server 2005):

declare @t table (
    descr varchar(10),
    myBit1 bit, 
    myBit2 bit
)
insert into @t values ('test1', 0, 1)
insert into @t values ('test2', 1, 0)
insert into @t values ('test3', 1, 1)
insert into @t values ('test4', 0, 0)

select myBit1, count(myBit1) from @t group by myBit1
select myBit2, count(myBit1) from @t group by myBit2

결과:

myBit1 
------ -----------
0      2
1      2

myBit2 
------ -----------
0      2
1      2

저는 TinyInt를 선호합니다.그런 다음 필드에 대해 집계 카운트를 수행할 때 필드를 캐스팅할 필요가 없습니다.또한 일부 프런트 엔드 언어는 다른 언어와는 다르게 해석하고 Tiny를 사용합니다.Int는 모든 프런트엔드 언어에 대한 검증 체크를 보편화합니다.

MySQL을 사용하는 경우 BIT 데이터 유형을 사용하지 않는 것이 좋습니다. http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

저는 'T'나 'F'와 함께 char(1)를 사용하는 것을 좋아합니다.네, 다른 값과 함께 남용될 수 있지만 적어도 보고서나 비트 또는 이진수 값을 사용하기 어려운 다른 곳에서 쉽게 볼 수 있습니다.

언급URL : https://stackoverflow.com/questions/488811/tinyint-vs-bit

반응형