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

У 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

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

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

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

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

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

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

Текстові (рядкові) типи даних

Ці типи використовуються для зберігання текстової інформації.
CHARфіксована довжина рядка (до 255 символів).
VARCHARзмінна довжина рядка (до 65,535 символів).
TEXTтекстові дані (до 65,535 символів).
TINYTEXTмалий текст (до 255 символів).
MEDIUMTEXTсередній текст (до 16,777,215 символів).
LONGTEXTдуже великий текст (до 4,294,967,295 символів).

CHAR

У MySQL тип даних CHAR використовується для зберігання рядків фіксованої довжини.
Фіксована довжинапри оголошенні потрібно вказати довжину, наприклад, CHAR(10). Якщо рядок коротший за вказану довжину, він доповнюється пробілами до визначеної довжини.
Довжинаможе бути від 1 до 255 символів (CHAR(N), де N – довжина).
Продуктивністьможе бути швидшим за VARCHAR, особливо при роботі з рядками однакової довжини.
Автоматичне видалення пробілівMySQL автоматично обрізає пробіли при вибірці (SELECT).

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

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username CHAR(10) NOT NULL
);
INSERT INTO users (username) VALUES ('Jenny');

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

  • Якщо всі значення мають однакову або майже однакову довжину (наприклад, коди країн, поштові індекси).
  • Якщо потрібен швидкий пошук (наприклад, індексовані поля, які не змінюються часто).

Якщо ж рядки мають змінну довжину, краще використовувати VARCHAR.

VARCHAR

VARCHAR використовується для зберігання рядків змінної довжини. На відміну від CHAR, він не доповнює рядки пробілами до фіксованої довжини, що робить його більш ефективним для текстових даних змінної довжини.
Змінна довжинаVARCHAR використовує рівно стільки місця, скільки потрібно для даних, плюс 1 або 2 байти для зберігання довжини рядка.
Діапазон довжиниможе містити від 1 до 65,535 символів (залежно від загального розміру рядка та кодування).
Оптимізація просторуна відміну від CHAR, не доповнює рядки пробілами, тому економить місце.
Швидкість доступуможе бути трохи повільнішим за CHAR, особливо якщо рядки часто змінюють довжину.

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

CREATE TABLE users_varchar (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    city VARCHAR(50)
);
INSERT INTO users (username, email, city) 
VALUES 
('Alice', 'alice@example.com', 'Kyiv'),
('Willie', 'willie@example.com', 'Lviv'),
('Jenny', 'jenny@example.com', ‘Kharkiv’);

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

  • Коли довжина рядків сильно змінюється (наприклад, імена користувачів, електронні адреси).
  • Коли потрібно економити місце в базі даних.
  • Якщо значення будуть часто оновлюватися.

Але якщо всі значення однакової довжини (наприклад, коди країн: UA, US, FR), краще використовувати CHAR.

Ще трохи про VARCHAR та CHAR

Як MySQL зберігає VARCHAR?

  • Якщо рядок ≤ 255 символів → використовується 1 байт для зберігання довжини.
  • Якщо рядок > 255 символів → використовується 2 байти для зберігання довжини.
ПараметрCHAR(N)VARCHAR(N)
ДовжинаФіксованаЗмінна
Додатковий простірДоповнюється пробіламиЗаймає рівно стільки місця, скільки потрібно + 1-2 байти на зберігання довжини
ПродуктивністьШвидше для однакових розмірівЕфективніше для коротших рядків

Типи TEXT у MySQL

У MySQL існує чотири типи TEXT, що відрізняються максимальною довжиною.

ТипМакс. розмірВикористання
TINYTEXT255 байтів (~255 символів)Короткі нотатки, теги, заголовки
TEXT65,535 байтів (~65,535 символів)Опис товару, статті, коментарі
MEDIUMTEXT16,777,215 байтів (~16 млн символів)Великі документи, книги
LONGTEXT4,294,967,295 байтів (~4 ГБ тексту)Дуже великі тексти (енциклопедії, архіви)

TINYTEXT

TINYTEXT – це один із текстових типів, призначений для зберігання коротких текстових значень.
Максимальна довжинадо 255 байтів (~255 символів у кодуванні ASCII, менше в UTF-8).
Змінна довжиназберігає рівно стільки символів, скільки потрібно.
Економить місцевикористовується для дуже коротких текстів.
Не підтримує значення за замовчуваннямне можна встановити DEFAULT.
Не можна повністю індексуватиіндексуються тільки перші N символів.

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

CREATE TABLE messages (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    short_message TINYTEXT NOT NULL
);
INSERT INTO messages (username, short_message) 
VALUES 
('Alice', 'Hello, khuylo is dead!'),
('Willie', 'Great news. Thank you!');

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

  • Якщо потрібно зберігати короткі текстові фрагменти (наприклад, теги, заголовки, нотатки).
  • Якщо розмір тексту змінний, але не перевищує 255 символів.

Якщо потрібно ефективно індексувати дані, краще використовувати VARCHAR.

TEXT

TEXT використовується для зберігання великих текстових блоків. Це гарний вибір для збереження описів, коментарів або будь-яких довгих текстових значень.
Максимальна довжина65,535 байтів (~65,535 символів)
Змінна довжиназберігає рівно стільки символів, скільки потрібно.
ІндексаціяНе можна індексувати повністю – індекси працюють тільки з початковою частиною рядка (наприклад, перші 255 символів).
Значення за замовчуваннямНе підтримує значення за замовчуванням – на відміну від VARCHAR.

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

CREATE TABLE articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    short_description TINYTEXT
);
INSERT INTO articles (title, content, short_description) 
VALUES 
('MySQL Guide', 'This is a long text about MySQL...', 'A short MySQL tutorial');

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

  • Коли потрібно зберігати великі обсяги тексту (наприклад, статті, коментарі, логи).
  • Коли не потрібно використовувати частий пошук за індексами.

Якщо значення не дуже довгі, краще використовувати VARCHAR, оскільки він швидший і підтримує індекси.

MEDIUMTEXT

MEDIUMTEXT – це один із текстових типів, призначений для зберігання дуже великих текстових даних.
Максимальна довжина16,777,215 байтів (~16 мільйонів символів у кодуванні ASCII, менше в UTF-8).
Змінна довжиназберігає рівно стільки символів, скільки потрібно.
Зберігання довжини рядкаВикористовує 3 байти для зберігання довжини рядка.
Індексаціяобмежена – можна індексувати тільки перші N символів.
Значення за замовчуваннямНе підтримує значення за замовчуванням – на відміну від VARCHAR.

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

CREATE TABLE articles_medium (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content MEDIUMTEXT NOT NULL
);
INSERT INTO articles (title, content) 
VALUES 
('MySQL Introduction', 'This is a very long article about MySQL ...'),
('Big Data Analysis', 'This article explores big data techniques...');

LONGTEXT

LONGTEXT – це найбільший із підтипів TEXT, який використовується для зберігання гігантських текстових даних.
Максимальна довжинаМаксимальна довжина – 4,294,967,295 байтів (~4 ГБ, до 4 мільярдів символів).
Змінна довжиназберігає рівно стільки символів, скільки потрібно.
Зберігання довжини рядкаВикористовує 4 байти для зберігання довжини рядка.
Індексаціяобмежена – можна індексувати тільки перші N символів.
Значення за замовчуваннямНе підтримує значення за замовчуванням – на відміну від VARCHAR.

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

CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    full_text LONGTEXT NOT NULL
);
INSERT INTO books (title, full_text) 
VALUES 
('MySQL Handbook', 'This is the full text of the book...'),
('Big Data Handbook', 'This book contains a detailed guide on big data...');

Порівняння типів TEXT

ПараметрTINYTEXTTEXTMEDIUMTEXTLONGTEXT
Макс. довжинадо 255 байтів (~255 символів)65,535 символів (~64 КБ)16,777,215 символів (~16 МБ)4,294,967,295 символів (~4 ГБ)
Використання байтів для довжини1 байт2 байти3 байти4 байти
Типові випадки використанняТеги, заголовки, нотаткиОпис товару, коментаріСтатті, книги, великі JSON-даніАрхіви, енциклопедії, лог-файли

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

В цьому відео поговоримо про:
00:00 Текстові типи
00:31 CHAR
03:48 VARCHAR
08:28 Типи TEXT у MySQL
09:06 TINYTEXT
12:08 TEXT
15:29 MEDIUMTEXT
17:44 LONGTEXT
19:37 Підсумки за типами TEXT