Что такое тип данных VARCHAR в SQL?

Ответ

VARCHAR — это тип данных для хранения строк переменной длины в реляционных базах данных (MySQL, PostgreSQL, SQL Server и др.).

Ключевые характеристики:

  • Переменная длина: Занимает только то место, которое необходимо для хранения строки, плюс небольшой оверхед (обычно 1-2 байта) для хранения информации о длине.
  • Ограничение длины: При определении столбца задается максимально допустимая длина, например, VARCHAR(255). Строки длиннее этого лимита будут обрезаны или вызовут ошибку (в зависимости от СУБД и настроек).
  • Эффективность: Экономит место на диске по сравнению с CHAR для данных, длина которых сильно варьируется.
Сравнение с CHAR: Характеристика VARCHAR(n) CHAR(n)
Длина Переменная (до n) Фиксированная (n)
Хранение Фактическая длина + оверхед Всегда n символов
Пробелы Не дополняются Дополняются пробелами до длины n
Идеально для Имена, описания, email Коды фиксированной длины (например, CHAR(2) для кода страны)

Пример использования:

CREATE TABLE users (
    id INT PRIMARY KEY,
    -- Имя пользователя, максимум 50 символов
    username VARCHAR(50) NOT NULL,
    -- Адрес электронной почты
    email VARCHAR(255) UNIQUE NOT NULL,
    -- Краткая биография, может быть длинной
    bio VARCHAR(1000)
);

-- Вставка данных. Столбец 'bio' займет место только для 12 символов.
INSERT INTO users (id, username, email, bio) 
VALUES (1, 'john_doe', 'john@example.com', 'Hello world!');

Ответ 18+ 🔞

А, ну ты глянь, опять этот ваш VARCHAR всплыл! Тип данных, блядь, для строк, которые, как моя зарплата, — длина переменная, ёпта!

Вот в чём его фишка, если по-простому:

  • Длина плавает: Место на диске он жрёт ровно столько, сколько в него запихнули, плюс пару байтов сверху, чтобы не забыть, насколько он длинный. Не то что этот тупорылый CHAR, который, как охуевший, всегда одно и то же место занимает, даже если там один символ.
  • Но есть потолок: Когда столбец создаёшь, ты ему говоришь: «Слушай сюда, дружок, больше N символов — ни-ни!». Например, VARCHAR(255). Попробуй сунуть больше — либо обрежет по самые помидоры, либо ошибку впендюрит, смотря какая база и как настроена.
  • Экономит место: Для всяких имён, описаний и прочей хуйни, которая то длинная, то короткая, — это просто песня. По сравнению с CHAR — экономия овердохуищная.

А теперь, чтобы совсем мозг не ебал, сравним с CHAR:

Признак VARCHAR(n) CHAR(n)
Длина Пляшет, как угорелый, но не больше n Застыла, как истукан, всегда ровно n
Хранение Реальная длина + пара байтов на память Всегда n символов, хоть тресни
Пробелы Их нихуя не добавляет Дополняет до нужной длины, как дурак
Куда совать Имена, почты, тексты Коды стран, флаги, всякая фиксированная ерунда

Ну и пример, чтобы закрепить, блядь:

CREATE TABLE users (
    id INT PRIMARY KEY,
    -- Имя юзера, больше 50 символов — иди нахуй
    username VARCHAR(50) NOT NULL,
    -- Почта, тут можно и подлиннее
    email VARCHAR(255) UNIQUE NOT NULL,
    -- Биография, можешь пиздеть сколько влезет, но в тысячу символов
    bio VARCHAR(1000)
);

-- Вставляем данные. Смотри, в 'bio' запихнули 12 символов — он 12 и займёт, а не всю тысячу, как какой-нибудь мудак!
INSERT INTO users (id, username, email, bio) 
VALUES (1, 'john_doe', 'john@example.com', 'Hello world!');

Вот и вся магия, ёпта. Используй с умом, а то нахерачишь CHAR(255) для хранения логинов и потом будешь думать, куда делось всё место на диске.