Відповіді:
Ці типи даних є синонімами.
Я збираюся застосувати інший підхід і припускаю, що ваші колеги-розробники так само важливо розуміти ваш код, як і для компілятора / бази даних. Використання булевого може зробити те ж саме, що і 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.