답변:
TINYINT는 8 비트 정수 값이고 BIT 필드는 1 비트, BIT (1) 및 64 비트, BIT (64) 사이에 저장할 수 있습니다. 부울 값의 경우 BIT (1)이 매우 일반적입니다.
에서 숫자 유형의 개요 ;
비트 [(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이 아닌 값은 참으로 간주됩니다.
boolean
그것이 실제로 조금이라도 바이트를 취할 것이라고 말하는 것이므로 BIT (1)이 v5.0.3 이후에 더 낫습니까?
BOOL
/ BOOLEAN
대한 별칭 TINYINT(1)
대신 BIT
. 물론, 그것들은 모두 전체 바이트를 차지하지만 의미 상 BIT
훨씬 더 적절할 것입니다.
이 모든 이론적 논의는 훌륭하지만 실제로는 MySQL을 사용하고 실제로 SQLServer를 사용하는 경우에는 작업하기가 더 쉽다는 간단한 이유 때문에 부울에 대해 이진이 아닌 데이터를 사용하는 것이 가장 좋습니다. 데이터를 출력하고 쿼리하는 등. BIT 데이터 유형의 처리가 둘에서 다르기 때문에 MySQL과 SQLServer 간의 상호 운용성을 달성하려는 경우 (즉, 둘간에 데이터를 동기화하려는 경우) 특히 중요합니다. 따라서 실제로 숫자 데이터 유형을 고수하면 번거 로움이 훨씬 적습니다. MySQL이 TINYINT (1)로 저장되는 BOOL 또는 BOOLEAN을 고수하는 것이 좋습니다. MySQL Workbench와 MySQL Administrator가 BIT 데이터 유형을 표시하는 방식조차 좋지 않습니다 (바이너리 데이터에 대한 작은 기호).
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이 처리하는 방식으로 인해). 따라서 앱이 유형을 확인하면 열을 확인란으로 형식화 할 수 있습니다. 이를 기반으로 형식을 결정합니다.
틀릴 수도 있지만 :
Tinyint는 0에서 255 사이의 정수입니다.
비트는 1 또는 0입니다.
따라서 나에게 비트는 부울에 대한 선택입니다.
제 경험상 BIT가 리눅스 OS 유형 (예 : 우분투)에 문제가 있다고 말하고 있습니다. Windows에서 DB를 개발하고 모든 것을 Linux에 배포 한 후 BIT DATA TYPE이있는 테이블에서 삽입하거나 선택한 쿼리에 문제가 발생했습니다.
현재 비트는 안전하지 않습니다. 나는 tinyint (1)로 변경하고 완벽하게 작동했습니다. 나는 그것이 1 또는 0이고 tinyint (1)이면 미분 값만 필요하다는 것을 의미합니다.