Біт проти булевих стовпців


12

Враховуючи, що бітові поля є лише бінарними поданнями даних і їх потрібно запитувати дещо «дивним» способом.

Чи справді це дає якусь користь, використовуючи бітове поле для булевого значення? З того, що я бачу, начебто випливає, що космос є єдиною реальною вигодою.

Відповіді:


14

Особисто я би використав BOOLEANдля булевого значення. Але майте на увазі застереження, яке в MySQL BOOLEANє лише синонімом TINYINT(1) [src] .

Це, звичайно, означає, що ви можете мати значення, відмінні від 0 або 1, якщо ви не будете обережні. Щоб цього уникнути, ви можете використовувати псевдоніми TRUEта FALSEпід час вставки та оновлення даних, оскільки вони відображають відповідно до 1 та 0.

Для повного завершення до 5.0.3 BITбуло також синонімом TINYINT(1).


1

Якщо я правильно це зрозумів, BOOLEAN завжди використовує 1 байт на стовпчик, але BIT (n) буде використовувати як мінімум кілька байтів, необхідних для утримання заданої кількості бітів.

Таким чином, BIT може заощадити деякий простір, але з BOOLEAN легше працювати, якщо вам потрібно запитати їх за допомогою SQL.

Якби у мене був набір прапорів, які були зрозумілі програмою і зберігалися в одному полі в додатку, я б хотів би використовувати BIT (n). Однак якби у мене були стовпці, які потрібно було запитувати з SQL, я б використовував BOOLEAN.

Прикладом може бути додаток, який використовував прапори, щоб записувати, на яких тижнях має відбуватися подія, причому трохи на тиждень - 1, якщо подія працює в даний тиждень. Якщо дані будуть спрощені для запиту в базі даних, вони були б "нормалізовані" у двох таблицях, але якщо дані потрібно зберігати лише в базі даних, то найкраще зберігати їх у формі, якою користується програма в.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.