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;что решило проблему.