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

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

Ответ 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 бит.

исх

TINYINT vs ENUM (0, 1) для булевых значений в MySQL

Ответ 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 в свой собственный логический тип языка программирования.