Ответы:
Эти типы данных являются синонимами.
Я собираюсь применить здесь другой подход и предположить, что для ваших коллег-разработчиков так же важно понимать ваш код, как и для компилятора / базы данных. Использование boolean может делать то же самое, что и tinyint, однако оно имеет то преимущество, что семантически передает ваши намерения, и это чего-то стоит.
Если вы используете tinyint, не очевидно, что единственные значения, которые вы должны видеть, - это 0 и 1. Логическое значение ВСЕГДА истинно или ложно.
boolean
не является отдельным типом данных в MySQL; это просто синоним tinyint
. См. Эту страницу в руководстве по MySQL .
Лично я бы предложил использовать tinyint в качестве предпочтения, потому что логическое значение не делает то, что, по вашему мнению, оно делает из имени, поэтому оно потенциально вводит в заблуждение код. Но на практическом уровне это действительно не имеет значения - они оба делают одно и то же, поэтому вы ничего не получите и не потеряете, используя их.
используйте enum, это самый простой и быстрый
я не буду рекомендовать enum или tinyint (1), так как bit (1) нужен только 1 бит для хранения логического значения, а tinyint (1) требует 8 бит.
ссылка
BIT(M) - approximately (M+7)/8 bytes
см .: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Хотя это правда , что bool
и tinyint(1)
является функционально идентичными, bool
должна быть предпочтительным вариантом , поскольку он несет в себе смысловое значение , что вы пытаетесь сделать. Кроме того, многие ORM преобразуются bool
в логический тип вашего языка программирования.
Мой опыт использования Dapper для подключения к MySQL показывает , что это имеет значение . Я изменил бит, не допускающий значения NULL (1), на tinyint (1), допускающий значение NULL, используя следующий сценарий:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Затем Dapper начал выбрасывать исключения. Я попытался посмотреть разницу до и после сценария. И заметил, что бит (1) изменился на tinyint (1).
Затем я побежал:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Что и решило проблему.
boolean
какtinyint(1)
. Таким образом, вы можете использоватьboolean
,true
иfalse
MySQL обрабатывает их какtinyint(1)
,1
и0
.