MySQL에서 BIT와 TINYINT의 차이점은 무엇입니까?


106

어떤 경우에 어떤 것을 사용 하시겠습니까? 많은 차이가 있습니까? 일반적으로 부울을 저장하기 위해 지속성 엔진에서 사용하는 것은 무엇입니까?

답변:


122

TINYINT는 8 비트 정수 값이고 BIT 필드는 1 비트, BIT (1) 및 64 비트, BIT (64) 사이에 저장할 수 있습니다. 부울 값의 경우 BIT (1)이 매우 일반적입니다.


10
TINYINT와 BIT (8)의 차이점은 무엇입니까?
Pacerier

16
TINYINT는 부호가 있거나 부호가 없을 수 있으며 음수와 관련됩니다. 비트는 데이터에 서명하지 않고 비트 만 저장하므로 MSB를 직접 해석해야합니다.
정의

4
혼동을 피하기 위해 TINYINT 및 BIT (1)의 저장 요구 사항이 다르지 않으며 BOOL 및 BOOLEAN이 TINYINT (1) 숫자 유형 개요의 동의어라는 점을 추가해야합니다 .
Timo Strotmann

59

에서 숫자 유형의 개요 ;

비트 [(M)]

비트 필드 유형. M은 1에서 64 사이의 값당 비트 수를 나타냅니다. M이 생략 된 경우 기본값은 1입니다.

이 데이터 유형은 MyISAM 용 MySQL 5.0.3에서 추가되었으며 5.0.5에서는 MEMORY, InnoDB, BDB 및 NDBCLUSTER로 확장되었습니다. 5.0.3 이전에는 BIT가 TINYINT (1)의 동의어입니다.

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

아주 작은 정수. 부호있는 범위는 -128 ~ 127입니다. 부호없는 범위는 0 ~ 255입니다.

또한 이것을 고려하십시오.

BOOL, BOOLEAN

이러한 유형은 TINYINT (1)의 동의어입니다. 0 값은 거짓으로 간주됩니다. 0이 아닌 값은 참으로 간주됩니다.


12
당신은 boolean그것이 실제로 조금이라도 바이트를 취할 것이라고 말하는 것이므로 BIT (1)이 v5.0.3 이후에 더 낫습니까?
Pacerier 2012

3
예 @Pacerier. 부울은 단순히 숫자 필드의 추악한 별칭입니다.
Áxel Costas Pena 2013

7
실제 스토리지에 관한 한 BIT (1)은 여전히 ​​최소 1 바이트를 차지합니다. BIT (M) = (M + 7) / 8 바이트. (1 + 7) / 8 = 1 바이트. 숫자 유형 저장 요구 사항을 참조하십시오 .
Drazen Bjelovuk

1
슬픈 것을 BOOL/ BOOLEAN대한 별칭 TINYINT(1)대신 BIT. 물론, 그것들은 모두 전체 바이트를 차지하지만 의미 상 BIT훨씬 더 적절할 것입니다.
MestreLion

38

이 모든 이론적 논의는 훌륭하지만 실제로는 MySQL을 사용하고 실제로 SQLServer를 사용하는 경우에는 작업하기가 더 쉽다는 간단한 이유 때문에 부울에 대해 이진이 아닌 데이터를 사용하는 것이 가장 좋습니다. 데이터를 출력하고 쿼리하는 등. BIT 데이터 유형의 처리가 둘에서 다르기 때문에 MySQL과 SQLServer 간의 상호 운용성을 달성하려는 경우 (즉, 둘간에 데이터를 동기화하려는 경우) 특히 중요합니다. 따라서 실제로 숫자 데이터 유형을 고수하면 번거 로움이 훨씬 적습니다. MySQL이 TINYINT (1)로 저장되는 BOOL 또는 BOOLEAN을 고수하는 것이 좋습니다. MySQL Workbench와 MySQL Administrator가 BIT 데이터 유형을 표시하는 방식조차 좋지 않습니다 (바이너리 데이터에 대한 작은 기호).


1
내 생각에는 일부 인터페이스 등이 올바른 이진 데이터를 잘못 해석하는 것은 내 잘못이 아닙니다. 관리자 (나를 포함하여)가 일부 기호 (MySQL Wrokbench 참조)에 대해 불만을 제기하는 경우 이는 내 올바른 (바이너리) 데이터를 콘텐츠에 대한 정보를 제공하지 않는 기호로 잘못 해석 한 사람의 잘못입니다. 그래서 MySQL / Oracle은 실수를 저질렀 고, 누군가가 실수를했다고해서 프로그래밍 개념을 바꾸고 싶지는 않습니다.
Matmarbon 2015 년

11

BIT는 0과 1 (필드가 NOT NULL로 정의되지 않은 경우 NULL) 만 허용해야합니다. TINYINT (1)은 부호 없는지 여부에 따라 단일 바이트, -128..127 또는 0..255로 저장할 수있는 모든 값을 허용합니다 (1은 단일 숫자 만 사용하려는 것을 나타내지 만 더 큰 값을 저장하는 것을 방해하지 않습니다).

5.0.3 이전 버전의 경우 BIT는 TINYINT (1)로 해석되므로 차이가 없습니다 .

BIT는 "this is a boolean"시맨틱을 가지고 있으며, 일부 앱은 TINYINT (1)를 동일한 방식으로 고려합니다 (MySQL이 처리하는 방식으로 인해). 따라서 앱이 유형을 확인하면 열을 확인란으로 형식화 할 수 있습니다. 이를 기반으로 형식을 결정합니다.


4

틀릴 수도 있지만 :

Tinyint는 0에서 255 사이의 정수입니다.

비트는 1 또는 0입니다.

따라서 나에게 비트는 부울에 대한 선택입니다.


미안해 우리가 여기 T_SQL에 있다고 생각했기 때문에 나는 모른다
Allen Hardy

0

제 경험상 BIT가 리눅스 OS 유형 (예 : 우분투)에 문제가 있다고 말하고 있습니다. Windows에서 DB를 개발하고 모든 것을 Linux에 배포 한 후 BIT DATA TYPE이있는 테이블에서 삽입하거나 선택한 쿼리에 문제가 발생했습니다.

현재 비트는 안전하지 않습니다. 나는 tinyint (1)로 변경하고 완벽하게 작동했습니다. 나는 그것이 1 또는 0이고 tinyint (1)이면 미분 값만 필요하다는 것을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.