MySQL의 부울 값에 대한 부울 대 tinyint (1)


124

부울 값에 대해 MySQL 데이터베이스에서 사용하는 것이 가장 좋은 열 유형은 무엇입니까? 사용 boolean하지만 동료는 tinyint(1).


3
그것은 그 MySQL을 투명하게 취급 것 boolean등을 tinyint(1). 당신이 사용할 수 있도록 boolean, true그리고 false같은과 MySQL의 취급을 tinyint(1), 1하고 0.
ADTC 2016

또 다른 경우는 Y & N이있는 char 1이며 일부 사람들은 더 빠릅니다.
Zon

답변:


153

이러한 데이터 유형은 동의어입니다.


6
데이터 유형 이 동의어 라고 말하지는 않겠습니다. tinyint (1)은 bool과 동일하지만 tinyint와 bool은 동일하지 않습니다. 사소한 요점이지만 처음 읽었을 때 귀하의 답변이 저를 넘어 뜨
렸습니다

2
이것은 질문에 대한 답이 아닙니다. tinyint (1)이 bool과 기능적으로 동일하다는 것은 사실이지만 OP는 무엇이 가장 적합한 지 물었습니다. @dj_segfault의 대답은 부울 값을 저장할 때 왜 bool이 tinyint (1)보다 선호되어야 하는지를 설명하는 적절한 작업을 수행합니다.
Kyle Morgan

87

여기서는 다른 접근 방식을 취하고 동료 개발자가 컴파일러 / 데이터베이스와 마찬가지로 코드를 이해하는 것이 중요하다고 제안합니다. 부울을 사용하는 것은 tinyint를 사용하는 것과 동일한 일을 할 수 있지만 의도를 의미 론적으로 전달하는 이점이 있으며 그만한 가치가 있습니다.

tinyint를 사용하는 경우 표시되어야하는 유일한 값이 0과 1이라는 것이 분명하지 않습니다. 부울은 항상 true 또는 false입니다.


35

booleanMySQL에서 고유 한 데이터 유형이 아닙니다. 그것은 단지 tinyint. MySQL 매뉴얼의이 페이지를 참조하십시오 .

개인적으로 저는 tinyint를 기본 설정으로 사용하는 것이 좋습니다. 부울은 이름에서 생각하는 작업을 수행하지 않으므로 잠재적으로 잘못된 코드를 만들 수 있기 때문입니다. 그러나 실질적인 수준에서는 실제로 중요하지 않습니다. 둘 다 동일한 작업을 수행하므로 둘 중 하나를 사용하여 어떤 것도 얻거나 잃지 않습니다.


8

사용 열거 의 쉽고 빠른

bit (1)은 부울 값을 저장하는 데 1 비트 만 필요하고 tinyint (1)에는 8 비트가 필요하므로 enum 또는 tinyint (1)을 권장하지 않습니다.

심판

MySQL의 부울 값에 대한 TINYINT 대 ENUM (0, 1)


데이터베이스도 sqlite를 지원해야하므로 enum을 사용할 수 없습니다
tom

11
InnoDB를 사용하는 경우 bit는 tinyint만큼 많은 공간을 사용합니다. 에서 고성능의 MySQL 합니다 (percona들) "이노 상점은 당신이 어떤 저장 공간을 저장하지 않도록 작은 정수 형 충분히 큰 각 [비트] 열, 비트를 포함하는 [S]." 유일한 이득은 BIT (morethan1) 열에 여러 부울 값을 저장하는 경우입니다. 따라서 부울 필드가 하나만있는 경우 tinyint를 사용하는 것은 InnoDB의 비트와 동일하며 tinyint가 일반적으로 작업하기가 더 쉽기 때문에 바람직합니다.
billmalarky 2013

MySQL에 해당하지 않음 : BIT(M) - approximately (M+7)/8 bytes참조 : dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Jens

6

그것은 그 사실이지만 bool하고 tinyint(1)있습니다 기능적으로 동일합니다, bool당신이 뭘 하려는지의 의미 론적 의미를 전달하기 때문에 선호하는 옵션이 될 것이다. 또한 많은 ORM이 bool프로그래밍 언어의 기본 부울 유형으로 변환 됩니다.


0

Dapper 를 사용하여 MySQL 에 연결할 때의 경험 은 그것이 중요 하다는 입니다. 다음 스크립트를 사용하여 nullable이 아닌 bit (1)을 nullable tinyint (1)로 변경했습니다.

ALTER TABLE TableName MODIFY Setting BOOLEAN null;

그런 다음 Dapper는 예외를 던지기 시작했습니다. 대본 전후의 차이점을 살펴 보았습니다. 그리고 bit (1)이 tinyint (1)로 변경된 것을 확인했습니다.

그런 다음 실행했습니다.

ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;

문제가 해결되었습니다.

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