Типы данных в 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, редко используется в современных системах. |