Ответ
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 предпочтительнее.