Методи зберігання булевих значень у MySQL

Джерело: Методи збереження булевих значень у MySQL

1. Використання TINYINT(1)

Найпоширеніший спосіб зберігати булеві значення у MySQL — це використання типу даних TINYINT(1). Хоча TINYINT не є явно булевим типом, він ефективно представляє булеві значення, використовуючи 0 для false і 1 для true.

1.1 Опис схеми

Для збереження булевих значень можна визначити стовпець як TINYINT(1). Це позначення часто використовується для вказівки, що стовпець буде зберігати значення 0 або 1.

CREATE TABLE users (  
 id INT AUTO_INCREMENT PRIMARY KEY,  
 is_active TINYINT(1) NOT NULL  
);

1.2 Вставка даних

Вставка булевих значень виглядатиме так:

INSERT INTO users (is_active) VALUES (1); -- true  
INSERT INTO users (is_active) VALUES (0); -- false

pic

1.3 Запитування даних

Для запиту даних за булевими значеннями:

SELECT * FROM users WHERE is_active = 1; -- Отримати всіх активних користувачів  
SELECT * FROM users WHERE is_active = 0; -- Отримати всіх неактивних користувачів

1.4 Переваги та зауваження

  • Переваги: Простий і широко використовуваний; підтримується багатьма інструментами MySQL.
  • Зауваження: Обмежений зберіганням тільки значень 0 та 1; не має явних обмежень типу для булевих значень.

2. Використання типу даних BIT

Інший спосіб — це використання типу даних BIT. Тип BIT може зберігати бінарні дані, що робить його підходящим для булевих значень.

2.1 Опис схеми

Для збереження булевих значень визначте стовпець з типом BIT:

CREATE TABLE users (  
 id INT AUTO_INCREMENT PRIMARY KEY,  
 is_active BIT(1) NOT NULL  
);

2.2 Вставка даних

Вставка значень у стовпець типу BIT:

INSERT INTO users (is_active) VALUES (b'1'); -- true  
INSERT INTO users (is_active) VALUES (b'0'); -- false

pic

2.3 Запитування даних

Запитування стовпця BIT:

SELECT * FROM users WHERE is_active = b'1'; -- Отримати всіх активних користувачів  
SELECT * FROM users WHERE is_active = b'0'; -- Отримати всіх неактивних користувачів

2.4 Переваги та зауваження

  • Переваги: Більш компактне зберігання, ніж у TINYINT; можна зберігати більше ніж одне булеве значення в одному стовпці.
  • Зауваження: Менш інтуїтивно зрозумілий для тих, хто не знайомий з бінарними типами; значення BIT вимагають явного бінарного запису.

3. Використання CHAR(1) або VARCHAR(1)

Для більш явного представлення можна використовувати стовпці типу CHAR(1) або VARCHAR(1) для збереження булевих значень у вигляді символів, таких як ‘Y’/’N’ або ‘T’/’F’.

3.1 Опис схеми

Визначте стовпець з типом CHAR(1) або VARCHAR(1):

CREATE TABLE users (  
 id INT AUTO_INCREMENT PRIMARY KEY,  
 is_active CHAR(1) NOT NULL  
);

3.2 Вставка даних

Вставка значень у стовпець на основі символів:

INSERT INTO users (is_active) VALUES ('Y'); -- true  
INSERT INTO users (is_active) VALUES ('N'); -- false

pic

3.3 Запитування даних

Запитування за значеннями символів:

SELECT * FROM users WHERE is_active = 'Y'; -- Отримати всіх активних користувачів  
SELECT * FROM users WHERE is_active = 'N'; -- Отримати всіх неактивних користувачів

3.4 Переваги та зауваження

  • Переваги: Чітке представлення булевих станів; дозволяє використовувати більш описові значення, якщо це необхідно.
  • Зауваження: Використовує більше місця для зберігання, ніж TINYINT або BIT; вимагає перевірки для забезпечення використання лише допустимих символів.

4. Використання типу даних ENUM

Ви можете використовувати тип даних ENUM для збереження булевих значень з описовим текстом.
Це особливо корисно для ясності, коли ви хочете використовувати більш значущі позначення.

4.1 Опис схеми

Визначте стовпець ENUM з двома можливими значеннями:

CREATE TABLE users (  
 id INT AUTO_INCREMENT PRIMARY KEY,  
 is_active ENUM('yes', 'no') NOT NULL  
);

4.2 Вставка даних

Вставка даних у стовпець ENUM:

INSERT INTO users (is_active) VALUES ('yes'); -- true  
INSERT INTO users (is_active) VALUES ('no'); -- false

4.3 Запитування даних

Запит за значеннями стовпця ENUM на основі текстового представлення:

SELECT * FROM users WHERE is_active = 'yes'; -- Отримати всіх активних користувачів  
SELECT * FROM users WHERE is_active = 'no'; -- Отримати всіх неактивних користувачів

4.4 Переваги та зауваження

  • Переваги: Забезпечує чіткі, зрозумілі значення; може бути більш описовим.
  • Зауваження: Обмежений заздалегідь визначеними значеннями; може бути менш ефективним для великих наборів даних порівняно з числовими типами.

5. Висновок

У MySQL, хоча й немає спеціального булевого типу даних, ви можете ефективно використовувати TINYINT(1), BIT, CHAR(1), VARCHAR(1) або ENUM для збереження булевих значень. Кожен метод має свої переваги і підходить для різних сценаріїв, залежно від ясності, ефективності зберігання та зручності використання.

Якщо у вас є питання або потрібно додаткове пояснення, не соромтеся залишити коментар нижче!

Читати більше на: Методи збереження булевих значень у MySQL

Перекладено з: Methods for Storing Boolean Values in MySQL

Leave a Reply

Your email address will not be published. Required fields are marked *