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

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

Ответ

CHAR(10) и VARCHAR(10) — это строковые типы данных в SQL с фундаментальными различиями в хранении и использовании.

Ключевые отличия

Аспект CHAR(10) VARCHAR(10)
Хранение Всегда занимает фиксированные 10 байт (или символов, в зависимости от кодировки). Если строка короче, она дополняется пробелами справа. Занимает переменный объем: длина строки + 1-2 байта на служебную информацию о длине.
Производительность Быстрее для чтения и сравнения при работе со строками фиксированной длины, так как предсказуемый размер упрощает вычисления. Эффективнее использует память/дисковое пространство для строк переменной длины.
Сравнение При сравнении дополняющие пробелы обычно игнорируются. Сравнивается точно, пробелы учитываются.

Пример и рекомендации

CREATE TABLE Example (
    fixed_col CHAR(10),
    variable_col VARCHAR(10)
);

INSERT INTO Example VALUES ('abc', 'abc');
-- 'abc' в fixed_col будет храниться как 'abc       ' (7 пробелов).
-- 'abc' в variable_col займет ~4 байта (3 символа + 1 байт на длину).

Когда использовать:

  • CHAR — для данных с гарантированно одинаковой длиной (коды стран, пол, хэши фиксированной длины).
  • VARCHAR — для данных с переменной длиной (имена, адреса, описания).