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

«Для чего нужен тип данных TINYINT в базах данных?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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)).