Ответ
CHAR и VARCHAR используются для хранения строк, но по-разному управляют памятью:
CHAR(n)— тип фиксированной длины. Если объявлен какCHAR(10), то под каждое значение всегда выделяется ровно 10 символов. Если строка короче, она дополняется пробелами справа. Это делает операции сравнения предсказуемыми и быстрыми.VARCHAR(n)— тип переменной длины. Выделяется ровно столько байт, сколько нужно для хранения строки, плюс небольшой служебный overhead (1-2 байта) для хранения информации о длине.VARCHAR(10)может хранить строку'abc', заняв ~4 байта.
Пример создания таблицы:
CREATE TABLE users (
country_code CHAR(2), -- Всегда 2 символа (например, 'RU', 'US')
phone_prefix CHAR(3), -- Всегда 3 символа (например, '495')
username VARCHAR(50), -- До 50 символов, хранится только фактическая длина
bio VARCHAR(500) -- Длинный текст переменной длины
);
Ключевые соображения для выбора:
- Используйте
CHARдля данных, длина которых строго постоянна (коды, флаги, хэши фиксированной длины). Это улучшает производительность и целостность данных. - Используйте
VARCHARдля данных с переменной длиной (имена, описания, emails). Это существенно экономит место на диске и в памяти. - В современных СУБД разница в скорости между
CHARиVARCHARдля большинства операций незначительна, поэтомуVARCHARчасто является более безопасным и гибким выбором по умолчанию.