Ответ
TINYINT — это наименьший целочисленный тип данных в SQL, идеальный для хранения логических значений или очень маленьких диапазонов чисел.
Ключевые характеристики:
- Размер: Занимает 1 байт (8 бит).
- Диапазон значений:
SIGNED(со знаком): от -128 до 127UNSIGNED(без знака): от 0 до 255
Основные сценарии использования:
- Булевы (логические) флаги: Это самый частый случай. Например,
is_active,is_deleted,email_verified. - Ограниченные перечисления: Статусы, типы, категории, где вариантов меньше 255.
- Небольшие числовые значения: Месяц (1-12), день недели (1-7), рейтинг по 5-звездочной системе.
Пример с булевым флагом и перечислением:
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(255),
-- Логический флаг: 0 = черновик, 1 = опубликован
is_published TINYINT(1) UNSIGNED DEFAULT 0,
-- Категория статьи: 1=техно, 2=наука, 3=культура
category_id TINYINT UNSIGNED NOT NULL,
-- Порядок отображения (от 0 до 100)
display_order TINYINT UNSIGNED DEFAULT 0
);
Важное замечание: В MySQL TINYINT(1) часто интерпретируется графическими клиентами и некоторыми ORM как булев тип. Однако на уровне хранилища это все тот же 1-байтовый целочисленный тип. Использование TINYINT для флагов — это эффективная практика по сравнению с VARCHAR или BOOLEAN (который в MySQL является синонимом TINYINT(1)).
Ответ 18+ 🔞
А, TINYINT! Ну это ж классика, ёпта. Представь себе самого мелкого и шустрого целочисленного пацана во всём SQL-царстве. Места жрёт — один байт, всего-ничего, а пользы — овердохуища для определённых дел.
Если по-простому, то это:
- Вес: Как пушинка — 1 байт.
- Что влезет:
- Если со знаком (SIGNED) — от -128 до 127. Типа, чуть в минус заглянуть можно.
- Если без знака (UNSIGNED) — от 0 до 255. Положительный такой, жизнерадостный.
А где его, этого мелкого, применять-то?
- Флаги, галочки, переключатели. Это его коронный номер, ядрёна вошь! Всё, что «включено/выключено», «да/нет».
is_active,is_deleted— вот это всё. Вместо того чтобы городить строки или большие числа, ты суёшь туда 0 или 1, и все дела. Гениально и просто. - Маленькие списки (перечисления). Допустим, у тебя типов товаров или статусов заказа не больше 255 штук. Ну не тащить же для этого здоровенный INT, правда? TINYINT — то, что надо.
- Крошечные числа с известными границами. Номер месяца (от 1 до 12), день недели, рейтинг по пятибаллке. Идеально.
Смотри, как это в деле выглядит:
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(255),
-- Вот он, наш булев пацан. 0 — черновик, 1 — уже на публике. TINYINT(1) часто за булев тип и принимают.
is_published TINYINT(1) UNSIGNED DEFAULT 0,
-- Категория: 1=техно, 2=наука, 3=культура... вариантов до 255, так что за глаза.
category_id TINYINT UNSIGNED NOT NULL,
-- Порядок вывода, скажем, от 0 до 100. Тоже в его власти.
display_order TINYINT UNSIGNED DEFAULT 0
);
И главное, что надо запомнить: этот TINYINT(1) в MySQL — он хоть и ассоциируется с true/false, но под капотом он всё тот же целочисленный мужик на один байт. Использовать его для флагов — это не костыль, а грамотный подход, эффективнее, чем городить строки или что покрупнее. По сравнению с каким-нибудь VARCHAR для хранения «yes/no» — это просто небо и земля, блядь.