К списку
SQL и базы данныхJuniorСкрининг с HR

Отличия между типами данных CHAR и VARCHAR в SQL

Краткий ответ

Типы CHAR и VARCHAR предназначены для хранения строк, но CHAR занимает фиксированный размер, дополняя пустые места пробелами, а VARCHAR динамически хранит только фактические символы. CHAR оптимален для строк одинаковой длины, VARCHAR — для переменной длины.

Развёрнуто

Краткий ответ

Типы данных CHAR и VARCHAR используются для хранения текстовой информации в SQL. CHAR выделяет фиксированный объём памяти, заполняя недостающие символы пробелами, в то время как VARCHAR экономит место, сохраняя только фактическую длину строки.


Как это работает

В SQL CHAR(n) — это строка с фиксированной длиной n. Если введённая строка короче, она дополняется пробелами до длины n. Этот тип подходит, когда длина значений всегда одинаковая, например, коды стран или статусы.

VARCHAR(n) — это строка с переменной длиной до n. Хранит только символы, которые реально введены, что позволяет экономить пространство при хранении переменных по длине данных.

Характеристика CHAR VARCHAR
Размер хранения Фиксированный Переменный
Заполнение Пробелами Без заполнения
Использование Строки фиксированной длины Строки переменной длины
Производительность Быстрее при обработке фиксированных данных Лучше для хранения данных с разной длиной

Пример

CREATE TABLE users (
    country_code CHAR(2),  -- всегда 2 символа
    username VARCHAR(50)   -- до 50 символов, длина варьируется
);

INSERT INTO users (country_code, username) VALUES ('RU', 'ivan123');

В этом примере country_code всегда занимает 2 символа, а username может иметь длину до 50 символов.

Что важно знать на собеседовании

  • CHAR эффективен для хранения строк фиксированной длины, экономит время доступа.
  • VARCHAR экономит место при переменной длине данных, но может быть чуть медленнее.
  • При сравнении CHAR строки дополнены пробелами, что влияет на сравнение и индексацию.
  • Максимальный размер VARCHAR зависит от конкретной СУБД.
  • Для больших текстовых данных используются другие типы, например TEXT.

Тема: SQL и базы данных | Уровень: junior