У яких випадках ви б використовували які? Чи багато різниці? Які я, як правило, використовуються двигунами для збереження булей?
У яких випадках ви б використовували які? Чи багато різниці? Які я, як правило, використовуються двигунами для збереження булей?
Відповіді:
TINYINT - це 8-бітове ціле значення, поле BIT може зберігати між 1 бітом, BIT (1) та 64 бітами, BIT (64). Для булевих значень BIT (1) є досить поширеним.
BIT [(M)]
Тип бітового поля. M позначає кількість бітів на значення від 1 до 64. За замовчуванням 1, якщо M опущено.
Цей тип даних було додано в MySQL 5.0.3 для MyISAM та розширено в 5.0.5 на MEMORY, InnoDB, BDB та NDBCLUSTER. До 5.0.3 BIT - синонім TINYINT (1).
TINYINT [(M)] [UNIGNED] [ZEROFILL]
Дуже маленьке ціле число. Діапазон підписаних значень - від -128 до 127. Непідписаний діапазон - від 0 до 255.
Додатково врахуйте це;
БУЛЬ, БУЛЕЙ
Ці типи є синонімами TINYINT (1). Значення нуля вважається помилковим. Ненульові значення вважаються істинними.
boolean
будете займати байт, хоча його дійсно трохи, тож BIT (1) краще після v5.0.3?
BOOL
/ BOOLEAN
псевдоніми для TINYINT(1)
замість BIT
. Звичайно, всі вони займають цілий байт, але семантично BIT
було б набагато доречніше.
Усі ці теоретичні дискусії чудові, але насправді, принаймні, якщо ви також використовуєте MySQL, а також для SQLServer, найкраще дотримуватися небінарних даних для ваших булевих служб з тієї простої причини, що з вами легше працювати, коли вам виводить дані, запити тощо. Це особливо важливо, якщо ви намагаєтеся досягти сумісності між MySQL та SQLServer (тобто ви синхронізуєте дані між двома), оскільки обробка типу BIT даних відрізняється у двох. Так на практиці у вас буде набагато менше клопотів, якщо ви будете дотримуватися числового типу даних. Я рекомендую MySQL дотримуватися BOOL або BOOLEAN, який зберігається як TINYINT (1). Навіть те, як MySQL Workbench та MySQL Administrator відображають тип даних BIT, не є приємним (це маленький символ для двійкових даних).
BIT повинен дозволити лише 0 і 1 (і NULL, якщо поле не визначено як NOT NULL). TINYINT (1) дозволяє будь-яке значення, яке може зберігатися в одному байті, -128..127 або 0..255, залежно від того, не підписано чи ні (1 показує, що ви маєте намір використовувати лише одну цифру, але це не заважає зберігати більше значення).
Для версій старше 5.0.3, BIT інтерпретується як TINYINT (1), так що немає ні різниці немає.
У BIT є семантичний "це булевий", і деякі додатки будуть вважати TINYINT (1) тим же способом (завдяки способу, який MySQL використовував для цього), тому програми можуть відформатувати стовпчик як прапорець, якщо вони встановили прапорець і прийняти рішення про формат, заснований на цьому.
Можливо, не так, але:
Tinyint - це ціле число між 0 і 255
біт або 1, або 0
Тому для мене біт - це вибір для булів
Зі свого досвіду я кажу вам, що BIT має проблеми з типами ОС Linux (Ubuntu for ex). Я розробив свій db для Windows, і після того, як я розгорнув усе на Linux, у мене виникли проблеми із запитами, які вставляли або вибирали з таблиць, які мали тип BIT DATA.
Біт наразі не безпечний. Я змінився на tinyint (1) і працював чудово. Я маю на увазі, що вам потрібно лише значення для диференціювання, якщо це 1 або 0, а tinyint (1) для цього нормально