Для чего нужен тип данных TINYINT в базах данных?

Ответ

TINYINT — это наименьший целочисленный тип данных в SQL, идеальный для хранения логических значений или очень маленьких диапазонов чисел.

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

  • Размер: Занимает 1 байт (8 бит).
  • Диапазон значений:
    • SIGNED (со знаком): от -128 до 127
    • UNSIGNED (без знака): от 0 до 255

Основные сценарии использования:

  1. Булевы (логические) флаги: Это самый частый случай. Например, is_active, is_deleted, email_verified.
  2. Ограниченные перечисления: Статусы, типы, категории, где вариантов меньше 255.
  3. Небольшие числовые значения: Месяц (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. Положительный такой, жизнерадостный.

А где его, этого мелкого, применять-то?

  1. Флаги, галочки, переключатели. Это его коронный номер, ядрёна вошь! Всё, что «включено/выключено», «да/нет». is_active, is_deleted — вот это всё. Вместо того чтобы городить строки или большие числа, ты суёшь туда 0 или 1, и все дела. Гениально и просто.
  2. Маленькие списки (перечисления). Допустим, у тебя типов товаров или статусов заказа не больше 255 штук. Ну не тащить же для этого здоровенный INT, правда? TINYINT — то, что надо.
  3. Крошечные числа с известными границами. Номер месяца (от 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» — это просто небо и земля, блядь.