JavaRush /Курси /SQL SELF /Текстові типи даних: CHAR, VARCHAR

Текстові типи даних: CHAR, VARCHAR, TEXT

SQL SELF
Рівень 15 , Лекція 2
Відкрита

Коли мова заходить про роботу з текстовими даними в PostgreSQL, у нас є три головних герої: CHAR, VARCHAR і TEXT. Кожен з них має свої фішки, переваги і нюанси. Давай розбиратись по порядку.

CHAR(n)

CHAR, або character, — це рядок фіксованої довжини n. Якщо в рядку менше символів, ніж треба, він автоматично доповнюється пробілами.

Приклад:

id code - CHAR(5)
1 ''ABC''

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

А от якщо працюєш з текстом змінної довжини, додаткові пробіли просто дарма займають місце в базі.

VARCHAR(n)

VARCHAR, або variable character, створений для зберігання рядків змінної довжини з обмеженням на максимум n символів.

Приклад:

id username - VARCHAR(10)
1 ''Alice''

Цей тип ефективно використовує місце, бо зберігає тільки реальний текст. Але є мінус — треба вказувати обмеження довжини. Якщо рядок перевищить це обмеження, база даних видасть помилку.

TEXT

TEXT — це стрічковий тип даних без обмежень по довжині. Його часто юзають, коли не впевнений, до якого розміру може вирости текст.

Приклад:

id content - TEXT
1 ''Це довгий шматок тексту. Без обмежень!''

Переваги: можна зберігати тексти будь-якої довжини, не паритись про обмеження.

Недоліки: відсутність обмежень може привести до неефективного використання бази, якщо текстові дані почнуть "роздуватись".

Порівняння текстових типів даних

Коли працюєш з текстом, важливо розуміти, який тип даних підходить для конкретного випадку. Ось основні відмінності між CHAR, VARCHAR і TEXT:

Тип даних Довжина Продуктивність Коли юзати?
CHAR(n) Фіксована Швидше для рядків фіксованої довжини Для кодів фіксованої довжини (наприклад, ISO)
VARCHAR(n) Максимальна довжина n Швидше, ніж TEXT, якщо є обмеження довжини Для рядків змінної довжини з відомим максимумом
TEXT Необмежена Найбільш універсальний Для довгих текстів, обсяг яких важко передбачити

Практичні приклади використання

Отже, давай подивимось, як юзати ці типи даних у реальних сценаріях.

Приклад 1: Використання CHAR для кодів фіксованої довжини

Уяви, що ти працюєш з базою, де треба зберігати коди міст по стандарту ISO 3166-1 alpha-3. Кожен код має бути рівно з 3 символів.

city_id city_name - VARCHAR(50) iso_code - CHAR(3)
1 New York NYC
2 Los Angeles LAX
3 Chicago CHI

Тут CHAR(3) ідеальний, бо кожен ISO-код міста строго фіксованої довжини.

Приклад 2: Використання VARCHAR для імен користувачів

Ім'я користувача — це топова сфера для VARCHAR. Зазвичай ім'я має змінну довжину, але можна припустити, що воно точно не перевищить 50 символів.

user_id username - VARCHAR(50) email - VARCHAR(50)
1 Alice alice@example.com
2 Bob bob@example.net

VARCHAR тут економить місце, бо реальна довжина рядка може бути менше 50 символів.

Приклад 3: Використання TEXT для зберігання описів

Уяви, що у тебе є блог, де для кожного поста треба зберігати велике текстове описання. Тут оптимальний вибір — TEXT.

post_id title - VARCHAR(100) content - TEXT
1 Post 1 Це дуже довгий контент блогу, який триває і триває...

Якщо ти ніколи не знаєш наперед, якої буде довжини текст, TEXT підходить ідеально.

4. Додаткові нюанси і підводні камені

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

Проблема: CHAR додає пробіли

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

SELECT * FROM cities WHERE iso_code = 'NYC';
-- Нічого не повернеться, якщо не прибрати пробіли

Як виправити: Використовуй функцію TRIM() для видалення пробілів.

SELECT * FROM cities WHERE TRIM(iso_code) = 'NYC';

Проблема: Обмеження довжини у VARCHAR можуть викликати помилки

Якщо ти спробуєш вставити в поле типу VARCHAR рядок, що перевищує максимум, база даних видасть помилку.

INSERT INTO users (username, email) VALUES ('Ім_я_користувача_яке_занадто_довге_для_поля', 'test@example.com');
-- Помилка

Як виправити: Переконайся, що обмеження довжини (n) відповідає реальним потребам. Або юзай TEXT, щоб уникнути обмежень.

Проблема: TEXT може роздувати твою базу

TEXT зберігає необмежені дані, що може призвести до зайвого росту таблиць і ускладнення індексації.

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

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
-_- Рівень 52
8 січня 2026
Колись у майбутньому JavaRush перестане давати задачі з матеріалу, якого ще не існує в курсі. Але це майбутнє з жанру наукової фантастики. P.S. Оператор LIKE, окремий котел в пеклі буде заготовлений спеціально для тебе.