Ответ
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 — для данных с переменной длиной (имена, адреса, описания).
Ответ 18+ 🔞
Да ты посмотри, какая дичь! Два типа, вроде одно и то же — строки хранить, а под капотом, блядь, разница как между молотком и микроскопом.
Вот смотри, CHAR(10) — это такой зануда-перфекционист. Сказал десять байт — значит, блядь, десять, ни байтом меньше. Запишешь ты туда 'abc', а он тебе его, сука, пробелами до ушей набьёт, чтоб ровно десять было: 'abc '. Место на диске жрёт фиксированно, как удав кролика. Зато, когда его читать — всё предсказуемо, адрес памяти посчитал и сразу прыгнул, без лишних телодвижений.
А VARCHAR(10) — хитрая жопа экономная. Ему похуй на идеалы, он прагматик. Сказал 'abc' — он и сохранит три символа, да ещё пару байтов сверху на бумажку прилепит, где длину записал. Места занимает ровно столько, сколько надо. Но за это удобство платишь скоростью: чтобы его прочитать, надо сначала эту бумажку с длиной найти, вычислить, где он кончается... В общем, возни больше.
Короче, ёпта:
- CHAR — для всего, что как солдаты на параде, одинаковой длины: коды (
'RU','M'), всякие фиксированные номера. - VARCHAR — для всего живого и разного: имена, адреса, анекдоты про тещу. Тут экономия места важнее.
CREATE TABLE Example (
fixed_col CHAR(10), -- Здесь 'yes' превратится в 'yes '
variable_col VARCHAR(10) -- А здесь останется скромным 'yes'
);
Вывод, блядь, простой: не тыкай CHAR куда попало, а то места проёбывать начнёшь, как последний распиздяй. Для большинства человеческих данных — VARCHAR твой бронепоезд.