sourcecode

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

copyscript 2022. 9. 23. 00:05
반응형

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

MySQL 데이터베이스에서 부울 값에 가장 적합한 열 유형은 무엇입니까? 용 i i i i를 쓴다.boolean제는 '아까운 친구'를 쓰고 있어요.tinyint(1).

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

여기서 다른 접근방식을 취해서 컴파일러/데이터베이스와 마찬가지로 당신의 코드를 이해하는 것이 당신의 동료 개발자들에게 중요하다는 것을 제안합니다.「」를 사용합니다.boolean를 사용하는 과 같은 을 할 수 .tinyint하지만, 그것은 의미론적으로 당신의 의도가 무엇인지 전달할 수 있는 장점이 있고, 그것은 가치가 있다.

「 」를 하는 경우tinyint 여러분이 볼 수 게 아닙니다.0 ★★★★★★★★★★★★★★★★★」1.
A boolean ★★★true ★★★★★★★★★★★★★★★★★」false.

booleanMySQL에서 MySQL과 입니다.을 사용법tinyintMySQL 매뉴얼의 이 페이지를 참조하십시오.아래 인용문 및 예를 참조하십시오.dev.mysql.com/doc/

BOOL, BOUALLE 이러한 유형은 TINYINT(1)의 동의어입니다.값이 0이면 false로 간주됩니다.0 이외의 값은 true로 간주됩니다.

    mysql> SELECT IF(0, 'true', 'false');
    +------------------------+
    | IF(0, 'true', 'false') |
    +------------------------+
    | false                  |
    +------------------------+
    mysql> SELECT IF(1, 'true', 'false');
    +------------------------+
    | IF(1, 'true', 'false') |
    +------------------------+
    | true                   |
    +------------------------+
    mysql> SELECT IF(2, 'true', 'false');
    +------------------------+
    | IF(2, 'true', 'false') |
    +------------------------+
    | true                   |
    +------------------------+

단, 다음과 같이 TRUE 및 FALSE 값은 각각1과 0의 에일리어스일 뿐입니다.

mysql> SELECT IF(0 = FALSE, 'true', 'false');
+--------------------------------+
| IF(0 = FALSE, 'true', 'false') |
+--------------------------------+
| true                           |
+--------------------------------+
mysql> SELECT IF(1 = TRUE, 'true', 'false');
+-------------------------------+
| IF(1 = TRUE, 'true', 'false') |
+-------------------------------+
| true                          |
+-------------------------------+
mysql> SELECT IF(2 = TRUE, 'true', 'false');
+-------------------------------+
| IF(2 = TRUE, 'true', 'false') |
+-------------------------------+
| false                         |
+-------------------------------+
mysql> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false                          |
+--------------------------------+

2는 1도 0도 아니기 때문에 마지막 두 문에는 결과가 표시됩니다.

개인적으로는 tinyint를 사용하는 것이 좋습니다.왜냐하면 부울은 이름에서 당신이 생각하는 대로 되지 않기 때문에 오해를 일으킬 수 있는 코드를 만들 수 있기 때문입니다.하지만 실제적인 차원에서는 문제가 되지 않습니다.둘 다 같은 일을 하기 때문에 둘 다 사용해도 얻는 것도 잃는 것도 없습니다.

enum을 사용하는 것이 가장 쉽고 빠르다.

enum이나 tinyint(1)는 boolean 값을 저장하는데 1비트만 필요하고 tinyint(1)는 8비트가 필요하기 때문에 권장하지 않습니다.

레퍼런스

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

while while while while while while while while whilebool ★★★★★★★★★★★★★★★★★」tinyint(1)기능적으로는 동일하지만,bool바람직한 선택지가 되어야 합니다.왜냐하면 그것은 당신이 하려는 일의 의미적 의미를 담고 있기 때문입니다.많은 이 ORM을 합니다.bool프로그래밍 언어의 기본 부울 유형으로 변환합니다.

Dapper를 사용하여 MySQL에 접속할 때의 경험은 매우 중요합니다.다음 스크립트를 사용하여 nullable 비트(1)를 nullable tinyint(1)로 변경했습니다.

ALTER TABLE TableName MODIFY Setting BOOLEAN null;

그리고 대퍼는 예외를 던지기 시작했다.대본 전과 후의 차이를 보려고 노력했어요.비트가 tinyint(1)로 바뀐 것을 알게 되었습니다.

그 후, 다음과 같이 실행했습니다.

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

그래서 문제가 해결됐지

int 또는 bool을 선택할 때마다 특히 nullable column이 재생될 때 문제가 됩니다.

여러 장의 사진이 있는 제품을 상상해 보십시오.어떤 사진이 제품 표지의 역할을 하는지 어떻게 알 수 있습니까?음, 우리는 그것을 나타내는 열을 사용할 것입니다.

지금까지product_image테이블에는 두 개의 열이 있습니다.product_id그리고.is_cover

쿨? 아직 아니야.제품의 커버는 1개뿐이므로 이 두 열에 고유한 인덱스를 추가해야 합니다.

하지만 잠시만, 이 두 컬럼이 고유한 인덱스를 얻는다면 같은 제품에 대해 커버되지 않은 이미지를 어떻게 많이 저장할 수 있을까요?고유 인덱스가 여기에 오류를 발생시킵니다.

따라서 "좋습니다. 하지만 NULL 값은 사용할 수 있습니다.이 값은 고유한 인덱스 체크에 의해 제외됩니다."라고 생각할 수 있습니다.네, 이것은 사실입니다만, 언어 규칙은 여기서 간과되고 있습니다.

부울 유형 열의 NULL 값의 목적은 무엇입니까?"모두", "임의" 또는 "아니오" 중 어느 쪽입니까?boolean 열의 null 값을 사용하면 고유 인덱스를 사용할 수 있지만 레코드를 해석하는 방법도 혼란스러워집니다.

정수는 엄밀한 참과 거짓의 의미에 얽매이지 않기 때문에 경우에 따라서는 더 나은 목적에 도움이 될 수 있다고 말할 수 있다.

언급URL : https://stackoverflow.com/questions/3751853/boolean-vs-tinyint1-for-boolean-values-in-mysql

반응형