В чем разница между типами данных CHAR и VARCHAR в SQL?

«В чем разница между типами данных CHAR и VARCHAR в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CHAR и VARCHAR — строковые типы данных, различающиеся стратегией хранения и использования памяти.

CHAR(n) — строка фиксированной длины

  • Хранит всегда n символов. Если строка короче, она дополняется пробелами справа.
  • Размер: Всегда занимает n байт (в кодировках типа LATIN1) независимо от содержимого.
  • Скорость: Доступ к данным может быть немного быстрее из-за предсказуемого размера записи.
  • Использование: Для данных строго фиксированной длины (коды, флаги, аббревиатуры).
    -- Для значения 'ABC' в поле CHAR(5) будет храниться 'ABC  ' (2 пробела).
    CREATE TABLE country (country_code CHAR(2)); -- 'US', 'RU'

VARCHAR(n) — строка переменной длины

  • Хранит только фактические символы (до n). Пробелы не дополняются.
  • Размер: Занимает (длина данных + 1-2 байта на служебную информацию о длине).
  • Эффективность: Экономит место на диске и в памяти для коротких строк.
  • Использование: Для данных переменной длины (имена, адреса, описания).
    -- Для значения 'ABC' в поле VARCHAR(5) будет храниться только 'ABC'.
    CREATE TABLE user (username VARCHAR(50), bio VARCHAR(255));

Сравнение на примере

Тип Объявление Значение Хранится как Размер (байт)
CHAR(5) 'Hi' 'Hi' 'Hi ' 5
VARCHAR(5) 'Hi' 'Hi' 'Hi' 2 + overhead

Рекомендация: Используйте CHAR только когда длина данных абсолютно постоянна. В большинстве случаев VARCHAR предпочтительнее.