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

Ці типи використовуються для зберігання текстової інформації.
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

Leave a Reply

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