Відповіді:
Ці типи даних є синонімами.
Я збираюся застосувати інший підхід і припускаю, що ваші колеги-розробники так само важливо розуміти ваш код, як і для компілятора / бази даних. Використання булевого може зробити те ж саме, що і tinyint, однак це має перевагу в тому, щоб семантично передати те, що є вашим наміром, і це чогось варте.
Якщо ви використовуєте крихітний відтінок, не очевидно, що єдині значення, які ви повинні бачити, - це 0 і 1. Булевим ЗАВЖДИ є вірним або хибним.
boolean
не є окремим типом даних в MySQL; це просто синонім для tinyint
. Дивіться цю сторінку в посібнику MySQL .
Особисто я б запропонував використовувати tinyint як перевагу, тому що булевий не робить те, що, на вашу думку, робить із назви, тому це робить потенційно оманливим код. Але на практичному рівні це насправді не має значення - вони обидва роблять те саме, тож ви нічого не отримуєте і не втрачаєте, використовуючи будь-яке.
використовувати enum його найпростіше і швидко
я не рекомендую enum чи tinyint (1), оскільки біту (1) потрібно лише 1 біт для зберігання булевого значення, тоді як tinyint (1) потребує 8 біт.
реф
BIT(M) - approximately (M+7)/8 bytes
див.: Dev.mysql.com/doc/refman/8.0/uk/storage-requirements.html
Хоча це правда , що bool
і tinyint(1)
є функціонально ідентичними, bool
повинна бути кращим варіантом , оскільки він несе в собі смислове значення , що ви намагаєтеся зробити. Крім того, багато ORM перетворять bool
на рідний буловий тип вашої мови програмування.
Мій досвід використання Dapper для підключення до MySQL такий це має значення . Я змінив нульовий біт (1) на мінливий tinyint (1), використовуючи наступний сценарій:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Тоді Даппер почав кидати винятки. Я намагався подивитися на різницю до і після сценарію. І помітив, що біт (1) змінився на крихітний (1).
Я тоді побіг:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Що вирішило проблему.
boolean
якtinyint(1)
. Таким чином, ви можете використовуватиboolean
,true
іfalse
і MySQL розглядає їх якtinyint(1)
,1
і0
.