Boolean vs tinyint (1) для булевых значений в MySQL
какой тип столбца лучше всего использовать в базе данных MySQL для логических значений? Я использую boolean
но мой коллега использует tinyint(1)
.
6 ответов:
Я собираюсь принять другой подход здесь и предложить, что это так же важно для ваших коллег-разработчиков, чтобы понять ваш код, как это для компилятора/базы данных. Использование boolean может сделать то же самое, что и использование tinyint, однако он имеет преимущество семантически передавать то, что ваше намерение, и это чего-то стоит.
Если вы используете tinyint, не очевидно, что единственные значения, которые вы должны видеть, - это 0 и 1. Логическое значение всегда равно true или ложный.
boolean
не является отдельным типом данных в MySQL; это просто синонимtinyint
. смотрите эту страницу в руководстве MySQL.лично я бы предложил использовать tinyint в качестве предпочтения, потому что boolean не делает то, что вы думаете, что он делает из имени, поэтому он делает потенциально вводящий в заблуждение код. Но на практическом уровне это действительно не имеет значения - они оба делают одно и то же, поэтому вы ничего не получаете или не теряете, используя либо то, либо другое.
использовать перечисление его легко и быстро
Я не буду рекомендовать перечисление или tinyint(1), поскольку бит(1) нуждается только в 1 бит для хранения логического значения, а tinyint (1) нуждается в 8 битах.
ref
а это правда, что
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;
что решило проблему.