Boolean vs tinyint (1) для булевых значений в MySQL


какой тип столбца лучше всего использовать в базе данных MySQL для логических значений? Я использую boolean но мой коллега использует tinyint(1).

6 87

6 ответов:

эти типы данных являются синонимами.

Я собираюсь принять другой подход здесь и предложить, что это так же важно для ваших коллег-разработчиков, чтобы понять ваш код, как это для компилятора/базы данных. Использование boolean может сделать то же самое, что и использование tinyint, однако он имеет преимущество семантически передавать то, что ваше намерение, и это чего-то стоит.

Если вы используете tinyint, не очевидно, что единственные значения, которые вы должны видеть, - это 0 и 1. Логическое значение всегда равно true или ложный.

boolean не является отдельным типом данных в MySQL; это просто синоним tinyint. смотрите эту страницу в руководстве MySQL.

лично я бы предложил использовать tinyint в качестве предпочтения, потому что boolean не делает то, что вы думаете, что он делает из имени, поэтому он делает потенциально вводящий в заблуждение код. Но на практическом уровне это действительно не имеет значения - они оба делают одно и то же, поэтому вы ничего не получаете или не теряете, используя либо то, либо другое.

использовать перечисление его легко и быстро

Я не буду рекомендовать перечисление или tinyint(1), поскольку бит(1) нуждается только в 1 бит для хранения логического значения, а tinyint (1) нуждается в 8 битах.

ref

TINYINT vs ENUM (0, 1) для логических значений в MySQL

а это правда, что bool и tinyint(1) are функциональные идентичны, bool должен быть предпочтительным вариантом, потому что он несет семантический смысл того, что вы пытаетесь сделать. Кроме того, многие Ормы преобразуют bool в свой собственный логический тип языка программирования.

мой опыт при использовании щеголеватый подключиться к MySQL это важно. Я изменил номера, допускающий значение null бит(1) на значение null тип tinyint(1), Используя следующий скрипт:

ALTER TABLE TableName MODIFY Setting BOOLEAN null;

затем Dapper начал бросать исключения. Я попытался посмотреть на разницу до и после скрипта. И заметил, что бит(1) изменился на tinyint (1).

затем я побежал:

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

что решило проблему.