Ответ
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 — для данных с переменной длиной (имена, адреса, описания).