Какой тип столбца лучше всего использовать в базе данных MySQL для булевых значений? Я использую boolean
, но мой коллега использует tinyint(1)
.
Boolean vs tinyint (1) для булевых значений в MySQL
Ответ 1
Эти типы данных являются синонимами.
Ответ 2
Здесь я собираюсь использовать другой подход и предположить, что для ваших коллег-разработчиков так же важно понимать ваш код, как и для компилятора/базы данных. Использование boolean может сделать то же самое, что и использование tinyint, однако оно имеет преимущество семантически передавать то, что ваше намерение, и что стоит того.
Если вы используете tinyint, не очевидно, что единственные значения, которые вы должны увидеть, равны 0 и 1. Логическое значение ALWAYS равно true или false.
Ответ 3
boolean
не является отдельным типом данных в MySQL; это просто синоним tinyint
. См. эту страницу в руководстве MySQL.
Лично я бы предложил использовать tinyint в качестве предпочтения, потому что boolean не делает то, что вы думаете, что он делает от имени, поэтому он делает потенциально вводящий в заблуждение код. Но на практическом уровне это действительно не имеет значения - они оба делают одно и то же, поэтому вы не получаете или не теряете ничего, используя либо.
Ответ 4
используйте enum его простой и быстрый
я не буду рекомендовать перечисление или tinyint (1), так как бит (1) нуждается только в 1 бит для хранения логического значения, а tinyint (1) - 8 бит.
исх
Ответ 5
Мой опыт использования Dapper для подключения к MySQL заключается в том, что имеет значение. Я изменил бит с нулевым значением (1) на нулевую tinyint (1), используя следующий script:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Затем Даппер начал бросать Исключения. Я попытался разглядеть разницу до и после script. И заметил, что бит (1) изменился на tinyint (1).
Затем я побежал:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Что решило проблему.
Ответ 6
Хотя верно, что bool
и tinyint(1)
функционально идентичны, bool
должен быть предпочтительным вариантом, поскольку он несет семантический смысл того, что вы пытаетесь сделать. Кроме того, многие ORM преобразуют bool
в свой собственный логический тип языка программирования.