Деякі інші типи даних

Інші типи даних у MySQL.
BINARYвикористовується для зберігання бінарних (двійкових) даних.
VARBINARYвикористовується для зберігання бінарних (двійкових) даних змінної довжини.
BOOLEANце синонім для TINYINT(1).
JSONВін призначений для зберігання структурованих даних у форматі JSON
ENUMзначення вибираються лише з заздалегідь визначеного списку.
SETдозволяє вибирати низку значень зі списку можливих варіантів.

BINARY

BINARY використовується для зберігання бінарних (двійкових) даних. Це може бути корисно для зберігання хешів, зашифрованих значень, унікальних ідентифікаторів тощо.
Типбінарні дані фіксованої довжини
СинтаксисBINARY(n), де n — кількість байтів (від 1 до 255)
ЗберіганняЗберігає: точно n байтів, заповнюючи нулями (\0) при необхідності

Коли використовувати BINARY?

  • Для фіксованих хешів (SHA256)
  • Для кодування бінарних ідентифікаторів
  • Для шифрованих даних, якщо розмір завжди однаковий

Приклад створення таблиці:

CREATE TABLE users_binary (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    password_hash BINARY(32)
);
INSERT INTO users_binary (username, password_hash)
VALUES ('Jennifer', UNHEX(SHA2('password123', 256)));
-- SHA2(..., 256) повертає хеш як hex-рядок, UNHEX() — конвертує його у двійковий вигляд.

VARBINARY

VARBINARY використовується для зберігання бінарних (двійкових) даних змінної довжини.
ТипБінарний, змінної довжини
СинтаксисVARBINARY(n)
ЗберіганняБайти, а не текст
У чому відмінність від BINARYНе доповнює значення до фіксованої довжини

Коли використовувати VARBINARY?

  • Зберігання файлів, зображень, PDF, аудіо
  • Зберігання ключів, токенів, байтових масивів
  • Збереження хешів змінної довжини

Приклад створення таблиці:

CREATE TABLE users_varbinary (
    id INT AUTO_INCREMENT PRIMARY KEY,
    login VARCHAR(50),
    token VARBINARY(64)
);
INSERT INTO users_varbinary (login, token)
VALUES ('Jennifer', UNHEX(SHA2('secretcode', 512)));

BOOLEAN

BOOLEAN — це синонім для TINYINT(1).
Особливість неістинного значення0 = FALSE
Особливість істинного значенняБудь-яке ненульове значення = TRUE (зазвичай використовують 1)
ЗберіганняЗберігається як 1 байт

Коли використовувати BOOLEAN?

  • Прапорців: is_active, is_deleted, has_access
  • Налаштування користувача
  • Умовні стани

Приклад створення таблиці:

CREATE TABLE users_bool (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    is_active BOOLEAN
);
INSERT INTO users_bool (username, is_active)
VALUES 
    ('Olga', TRUE),
    ('Olena', FALSE),
    ('Petro', 1);

JSON

JSON – повноцінний тип даних починаючи з версії 5.7. Призначений для зберігання структурованих даних у форматі JSON (масиви, об’єкти тощо) прямо в таблицях бази даних.
ТипСтруктурований (JSON)
Автоматична перевіркаMySQL перевіряє, чи це валідний JSON
ПеревагиГнучкість зберігання напівструктурованих даних

Коли використовувати JSON?

  • Зберігання динамічних даних
  • API-логіка (наприклад, зберігання відповіді або конфігурації)
  • Локалізація (наприклад, різні переклади в одному полі)
  • Масиви властивостей, специфікації, параметри користувача тощо

Приклад створення таблиці:

CREATE TABLE products_json (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    specifications JSON
);
INSERT INTO products_json (name, specs)
VALUES 
('MacBook Air', '{"ram": "16GB", "cpu": "M2", "ports": ["USB-C", "Thunderbolt"]}');

ENUM

ENUM — це рядковий тип, де значення вибираються лише із заздалегідь визначеного списку.
Кількість варіантівДо 65,535 унікальних значень
ЗберігаєтьсяЯк число-індекс (1, 2, 3, …) у базі
Можливе значення ‘ ‘Якщо вказати NOT NULL, то не буде
Коли використовувати?Коли список можливих значень невеликий і рідко змінюється.

Приклад створення таблиці:

CREATE TABLE users_enum (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    role ENUM('admin', 'manager', 'user') NOT NULL
);
INSERT INTO users_enum (username, role)
VALUES 
    ('Andrew', 'admin'),
    ('Jenny', 'manager'),
    ('Nancy', 'user');

SET

SET — це рядковий тип, який дозволяє вибирати 0 або більше значень зі списку можливих варіантів.
Кількість варіантівМаксимум 64 значення
Порядок значеньФіксований, як у момент створення
Чутливість до реєструЗа замовчуванням – ні
Коли використовувати?Коли потрібно зберігати кілька вибраних опцій в одному полі:         ◦ Уподобання користувача (жанри, хобі)         ◦ Доступ до модулів         ◦ Набори прав або теги
CREATE TABLE users_set (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    interests SET('music', 'travel', 'reading', 'sport') NOT NULL
);
INSERT INTO users_set (name, interests)
VALUES 
  ('Kate', 'music,reading'),
  ('Irene', 'travel'),
  ('Peter', 'music,sport,travel');

Для додаткової візуалізації є відео.

Типи даних дати і часу

У MySQL є кілька типів даних, які використовуються для зберігання дати та часу.
DATEЗберігає лише дату (рік, місяць, день).
DATETIMEЗберігає дату і час (рік, місяць, день, години, хвилини, секунди).
TIMESTAMPТакож зберігає дату і час, має прив’язку до часового поясу сервера.
TIMEЗберігає лише час (години, хвилини, секунди).
YEARЗберігає лише рік (у форматі 4 цифри).

DATE

DATE у MySQL — це тип для зберігання днів, місяців і років без інформації про час.
Формат зберігання‘YYYY-MM-DD’
Діапазон значеньвід ‘1000-01-01’ до ‘9999-12-31’
Розмір в пам’яті3 байти
Особливості•Якщо ви введете неправильний формат дати (наприклад, ‘2025-13-49’), MySQL зазвичай згенерує NULL або ‘0000-00-00’ залежно від режиму (sql_mode). •DATE не враховує часові пояси — просто зберігає дату як є.

Приклад запиту з використанням цього типу:

CREATE TABLE holidays (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    holiday_date DATE NOT NULL
);
INSERT INTO holidays (name, holiday_date)
VALUES 
    ('New Year', '2025-01-01'),
    ('Christmas', '2025-12-25'),
    ('Easter', '2025-04-20'),
    ('Ukrainian Independence Day', '2025-08-24');
SELECT * FROM holidays;

DATETIME

Тип DATETIME у MySQL — це один із типів для зберігання дати та часу разом. Цей тип добре підходить для моментів на часовій шкалі: створення запису, початок події, дедлайни тощо.
Формат зберігання‘YYYY-MM-DD HH:MM:SS’
Діапазон значеньвід ‘1000-01-01 00:00:00’ до ‘9999-12-31 23:59:59’
Розмір в пам’яті•8 байтів (без точності до мікросекунд) •До 12 байтів (якщо використовується DATETIME(fsp), де fsp — кількість знаків мікросекунд, від 0 до 6)
Особливості•Не залежить від часового поясу, на відміну від TIMESTAMP. •Не змінюється автоматично при зміні часової зони сервера. •Добре підходить для бізнес-логіки, де важливо зберігати саме те, що було введено

Приклад запиту з використанням цього типу:

CREATE TABLE meetings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    start_time DATETIME NOT NULL
);
INSERT INTO meetings (title, start_time)
VALUES 
    ('Team Meeting', '2025-04-29 09:00:00'),
    ('Meeting with Client', '2025-04-29 14:30:00');

TIMESTAMP

Тип TIMESTAMP у MySQL дуже схожий на DATETIME, але має кілька важливих особливостей, які роблять його унікальним і корисним у певних випадках — особливо для відстеження часу змін або логування.
Формат зберігання‘YYYY-MM-DD HH:MM:SS’
Діапазон значень•Від ‘1970-01-01 00:00:01 UTC’ •До ‘2038-01-19 03:14:07 UTC’ (через обмеження UNIX-часу)
Розмір в пам’яті•4 байти (без мікросекунд) •до 7 байтів (з мікросекундами)
Особливості•Залежить від часового поясу (конвертується в UTC) •Може бути автооновлюваним (DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)

Приклад запиту з використанням цього типу:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) not null,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO users (username) VALUES ('Jenny');
SELECT * FROM users;

TIME

Тип TIME у MySQL використовується для зберігання часу доби або тривалості. Добре підходить, якщо потрібно фіксувати години, хвилини та секунди — без дати.
Формат зберігання‘HH:MM:SS’
Діапазон значень•Від ‘-838:59:59’ до ‘838:59:59’ (тобто може зберігати не тільки час доби, а й тривалість, навіть підтримує негативні значення)
Розмір в пам’яті•3 байти (без мікросекунд) •до 6 байтів (якщо зберігати мікросекунди, як TIME(6)
Особливості•Підтримує негативні значення •Може використовуватися для тривалості перегляду, робочого часу, затримок, таймерів тощо. •Якщо вказати час у вигляді лише HH:MM, він автоматично буде доповнений до HH:MM:00.

Приклад запиту з використанням цього типу:

CREATE TABLE shiftstime (
    id INT AUTO_INCREMENT PRIMARY KEY,
    employee_name VARCHAR(100) not null,
    start_time TIME NOT NULL,
    end_time TIME NOT NULL
);
INSERT INTO shiftstime (employee_name, start_time, end_time)
VALUES 
    ('Jenny', '09:00:00', '17:30:00'),
    ('Penny', '14:00:00', '22:00:00');

YEAR

Тип YEAR у MySQL — це спеціалізований тип даних для зберігання року. Він добре підходить для випадків, коли потрібно фіксувати тільки рік, наприклад: рік випуску авто, рік народження, рік початку навчання тощо.
Формат зберігання‘YYYY’ (4 цифри)
Діапазон значень•від 1901 до 2155 (а також ‘0000’ — для невідомого року, якщо дозволено)
Розмір в пам’яті•1 байт
Особливості•Зберігає лише рік, без місяців чи днів

Приклад запиту з використанням цього типу:

CREATE TABLE cars (
    id INT AUTO_INCREMENT PRIMARY KEY,
    model VARCHAR(100) not null,
    production_year YEAR not null
);
INSERT INTO cars (model, production_year)
VALUES 
    ('Toyota Corolla', 2020),
    ('Ford Mustang', 2015),
    ('Dodge Charger', 2020);

Для додаткової візуалізації є відео:

В цьому відео поговоримо про:
00:00 Типи даних дати і часу
00:31 DATE
04:11 DATETIME
07:16 TIMESTAMP
12:17 TIME
15:00 YEAR

Христос Воскрес!

Щиро вітаю з Великоднем!

Нехай це світле свято подарує нам сили, наснагу та віру в перемогу.

Бажаю всім здоров’я, злагоди та весняного тепла в серці!

Підтримуйте Збройні Сили України в ці нелегкі часи.

Триймаймося! Слава Україні!