Джерело: Методи збереження булевих значень у 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
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
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
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