Типы данных в MySQL полное руководство с примерами

Типы данных в MySQL полное руководство с примерами

Очень важную роль в разработке какого либо проекта имеют типы данных, как приходящие/уходящие данные так и хранимые в базе данных. MySQL типы данных, определяют фундамент на котором строится структура таблиц и логика работы всего приложения. Какой тип данных вы выберите для ячейки базы данных, такой логика работы и будет выстраиваться на программном уровне. А еще, это напрямую зависит от выделяемой памяти под конкретное содержимое в этой ячейке.

В данной статье разберём основные типы данных MySQL, узнаем, какие типы данных поддерживаются в MySQL, рассмотрим их в виде наглядной таблицы и приведём примеры использования для каждого типа столбцов.

Что такое типы данных в MySQL

При создании базы данных и ее таблиц, всегда нужно указывать тип данных который будет храниться в ячейке. Например, нужно указать что тип данных будет число, текст, дата и т.п. А также, какой лимит объема памяти нужно выделить на это. Основные категории типов данных в MySQL бывают следующими:

  • Числовые (целые и дробные)
  • Строковые (текстовые и бинарные)
  • Дата и время
  • Пространственные (геоданные)
  • Перечисления (ENUM и SET)

Выбор правильного типа данных — это ключ к эффективной работе с таблицами. Например, INT подходит для идентификаторов, VARCHAR для кратких текстов, TEXT для больших статей, а DECIMAL для точных денежных значений (например, баланс пользователя).

Пример типов данных в MySQL

Приводим в пример mysql типы данных, которые необходимы при разработке. От верного указания типа данных в mysql, зависит качество работы вашего проекта и его безопасность.

Числовые типы данных

Числовые типы применяются в разных задачах, например, для хранения баланса пользователя, количества товаров, количества просмотров страницы и т.д.

Тип Размер Описание Пример
TINYINT 1 байт Малые числа boolean
SMALLINT 2 байта Малые числа boolean
MEDIUMINT 3 байта Малые числа boolean
INT 4 байта Основной тип ID
BIGINT 8 байт Очень большие числа Лайки, просмотры
FLOAT ~7 знаков Хранит не точные дробные числа/td>

Математика, формулы
DOUBLE ~15 знаков Большее число точности Аналитика
DECIMAL перем. Точные значения Цены, деньги

Строковые типы данных

Тип данных строковой обычно используется для хранения комментариев к статье, самой статьи или отдельной страницы, описания товара в и т.п.

Тип Максимальная длина Описание
VARCHAR до 65К Строки переменной длины
TINYTEXT 255 Маленькие тексты
TEXT 65К Текстовые данные, описания
MEDIUMTEXT 16M Статьи, документация
LONGTEXT 4ГБ Очень большие тексты

Типы данных дата и время

Дата и время всегда занимают отдельный тип данных, хотя его можно вставить и в текстовый тип данных. Но если применять правильный тип, то его будет проще форматировать уже в самом коде с помощью функций. В одной из прошлых постов мы рассказывали о том как время и дата в php может форматироваться в зависимости от ваших задач.

Тип Формат Описание
DATE YYYY-MM-DD Дата
TIME HH:MM:SS Время
DATETIME YYYY-MM-DD HH:MM:SS Дата + время
TIMESTAMP UNIX-time Логирование (текущее значение даты и времени)
YEAR YYYY Год

TIMESTAMP автоматически обновляется при изменении записи и использует меньше памяти чем DATETIME.

Пример создания таблицы с типом данных MySQL

Ранее мы уже описывали процесс создания таблиц в базе данных в одной из статей на тему: что такое sql.

CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(150) NOT NULL UNIQUE,
    age TINYINT UNSIGNED,
    balance DECIMAL(10,2) DEFAULT 0.00,
    role ENUM('user','admin','manager') DEFAULT 'user',
    bio TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Все типы данных MySQL в таблице

Более полный список всех типов данных MySQL предлагаем рассмотреть в одной таблице:

Тип Категория Краткое описание
TINYINT Числовой / Целый Малые целые числа (1 байт). Диапазон: -128..127 (SIGNED) / 0..255 (UNSIGNED). Часто используется для флагов/boolean.
SMALLINT Числовой / Целый Небольшие целые (2 байта). Подходит для небольших счётчиков.
MEDIUMINT Числовой / Целый Средние целые (3 байта). Уровень между SMALLINT и INT.
INT, INTEGER Числовой / Целый Стандартный целочисленный тип (4 байта). Широко используется для ID и счётчиков.
BIGINT Числовой / Целый Очень большие целые (8 байт). Для больших счётчиков, статистики, глобальных ID.
FLOAT Числовой / Плавающая точка Числа с плавающей точкой (неточная арифметика, ~7 значимых цифр). Подходит для научных/приближённых вычислений.
DOUBLE Числовой / Плавающая точка Числа двойной точности (неточная арифметика, ~15 значимых цифр).
REAL Числовой Синоним DOUBLE в MySQL (в зависимости от SQL mode может быть alias).
DECIMAL, NUMERIC Числовой / Точный Десятичные числа с фиксированной точностью (DECIMAL(M,D)). Рекомендуется для денег и финансов (точная арифметика).
BIT Числовой / Бинарный Хранение битовых полей (битовые маски).
BOOLEAN, BOOL Числовой / Логический (алиас) Алиас для TINYINT(1). Представляет true/false (хранится как число).
SERIAL Числовой / Специальный Синоним для BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE (удобный алиас в некоторых контекстах).
CHAR(n) Строковый Фиксированная длина строки (до 255). Хорош для кодов/фиксированных полей.
VARCHAR(n) Строковый Переменная длина строки (до 65 535 байт с учётом ряда и кодировки). Широко используется для имён, email и т.п.
BINARY(n) Бинарный Фиксированная длина бинарных данных.
VARBINARY(n) Бинарный Переменная длина бинарных данных.
TINYBLOB Бинарный / BLOB До 255 байт бинарных данных.
BLOB (TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB) Бинарный / BLOB Хранение бинарных данных: BLOB ≈ 64KB, MEDIUMBLOB ≈ 16MB, LONGBLOB ≈ 4GB. Для изображений, файлов.
TINYTEXT Текстовый / TEXT До 255 символов текста.
TEXT (TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT) Текстовый Хранение текстовых данных: TEXT ≈ 64KB, MEDIUMTEXT ≈ 16MB, LONGTEXT ≈ 4GB. Для описаний, статей, JSON больших объёмов.
ENUM(‘v1′,’v2’,…) Перечисление Один из заранее заданных строковых вариантов. Удобно для небольших списков фиксированных значений (статусы, роли).
SET(‘a’,’b’,…) Набор Набор значений из предопределённого списка — можно хранить несколько выбранных значений одновременно.
JSON Специальный / Документ Специальный тип для хранения JSON-документов с проверкой синтаксиса и поддержкой индексирования (включая функциональные возможности MySQL для JSON).
DATE Дата Дата в формате YYYY-MM-DD. Для дней рождения, дат событий.
TIME Время Время суток в формате HH:MM:SS или интервалы времени.
DATETIME Дата + время Комбинация даты и времени (YYYY-MM-DD HH:MM:SS). Подходит для хранения локального времени события.
TIMESTAMP Дата/время (метка) UNIX-метка времени, обычно хранит время в UTC и может автоматически обновляться (DEFAULT CURRENT_TIMESTAMP, ON UPDATE CURRENT_TIMESTAMP).
YEAR Год Хранит год (2 или 4 цифры в зависимости от варианта). Подходит для годовых полей.
GEOMETRY Пространственный (GIS) Базовый пространственный тип, может содержать любую геометрию.
POINT Пространственный (GIS) Одна точка (координаты).
LINESTRING Пространственный (GIS) Линия (последовательность точек).
POLYGON Пространственный (GIS) Полигон (многоугольник).
MULTIPOINT Пространственный (GIS) Набор точек.
MULTILINESTRING Пространственный (GIS) Набор линий.
MULTIPOLYGON Пространственный (GIS) Набор полигонов.
GEOMETRYCOLLECTION Пространственный (GIS) Коллекция геометрий разных типов.
NUMERIC Алиас Часто является синонимом DECIMAL (точная десятичная арифметика).
FLOAT(p) Числовой FLOAT с указанием точности (p) — детализация реализации зависит от версии MySQL.
DOUBLE PRECISION Алиас Полный синоним DOUBLE в большинстве реализаций.
YEAR(2) Исторический формат Устаревший/совместимый формат двухзначного года; лучше использовать YEAR(4) или DATETIME для ясности.
UNSIGNED Атрибут Модификатор для целочисленных типов: убирает знак, расширяя положительный диапазон (например, INT UNSIGNED).
ZEROFILL Атрибут (устарев.) Добавляет нули в начале при отображении; совместно с UNSIGNED, редко используется в современных системах.