Урок 1.4 · Время чтения: ~8 мин
Типы данных задают, какие значения может хранить каждый столбец таблицы. В этом уроке вы познакомитесь с основными типами данных SQL, поймёте, когда использовать каждый из них, и научитесь выбирать тип так, чтобы улучшить качество данных, эффективность хранения и производительность запросов.
Типы данных в SQL: INTEGER, VARCHAR, DATE и другие
В предыдущем уроке мы разобрали таблицы, ключи, ограничения и ACID. Теперь перейдём к практическому вопросу проектирования: какой тип данных назначить каждому столбцу.

Перед тем как разбирать подтипы, выделим основные группы типов данных в SQL:
- Числовые типы:
TINYINT,INT,BIGINT,DECIMAL,FLOAT - Строковые типы:
CHAR,VARCHAR,TEXT - Типы даты и времени:
DATE,TIME,DATETIME,TIMESTAMP - Специализированные типы:
BOOLEAN,BLOB,JSON
Какие числовые типы данных есть в SQL?
Числовые типы хранят числа, но разные задачи требуют разных типов. На практике обычно выбирают между:
- целыми типами для целых значений,
- точными десятичными типами для денег,
- типами с плавающей точкой для приблизительных вычислений.
Семейство INTEGER
Целочисленные типы хранят значения без дробной части.
| Тип | Типичный размер | Примерный диапазон (со знаком) |
|---|---|---|
TINYINT | 1 байт | от -128 до 127 |
SMALLINT | 2 байта | от -32 768 до 32 767 |
INTEGER / INT | 4 байта | от -2 147 483 648 до 2 147 483 647 |
BIGINT | 8 байт | от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Точные границы могут немного отличаться в зависимости от СУБД и поддержки unsigned.
DECIMAL / NUMERIC
DECIMAL хранит точные значения с фиксированной точностью.
DECIMAL(p, s)означает:p— общее число цифр,s— количество цифр после запятой.
- Пример:
DECIMAL(10, 2)поддерживает значения до 99 999 999.99. - Подходит для цен, счетов, налогов и других финансовых полей.
FLOAT / REAL / DOUBLE
Типы с плавающей точкой хранят приблизительные значения.
- Удобны для научных расчётов и телеметрии.
- Для денег обычно не подходят, так как возможны ошибки округления.
DOUBLEобычно точнее, чемFLOAT.
Какие строковые типы данных есть в SQL?
Текстовые типы различаются главным образом поведением длины и хранения.
CHAR
- Строка фиксированной длины.
CHAR(10)всегда резервирует 10 символов.- Если строка короче, многие СУБД дополняют её пробелами.
- Подходит для фиксированных кодов (например, коды стран).
VARCHAR
- Строка переменной длины до заданного лимита.
VARCHAR(255)хранит только фактически введённые символы.- Лучший выбор по умолчанию для имён, email, заголовков.
TEXT
- Большой текст переменной длины.
- Подходит для длинных описаний, комментариев и содержимого статей.
- Ограничения по индексации и хранению зависят от конкретной СУБД.
Какие типы данных даты и времени используются в SQL?
Временные типы нужно использовать везде, где вы храните дату, время или метку события.
DATE
Хранит только дату (год, месяц, день).
TIME
Хранит только время (часы, минуты, секунды).
DATETIME / TIMESTAMP
Хранит дату и время вместе.
В некоторых системах TIMESTAMP связан с часовыми поясами, а DATETIME хранится как «локальное» значение без семантики часового пояса. Это важно проверять до проектирования таблиц аудита и событий.
Какие еще типы данных полезно знать?
Во многих реляционных СУБД есть дополнительные специализированные типы:
BOOLEAN— логические значения true/false.BLOB— бинарные данные (изображения, файлы).JSON— полуструктурированные документы JSON.
Как выбрать правильный тип данных?
Практический чек-лист:
- Выбирайте наименьший тип, который безопасно покрывает диапазон значений.
- Для денег используйте
DECIMAL, а неFLOAT. - Для переменного текста обычно выбирайте
VARCHAR, аCHAR— только для фиксированной длины. - Для дат и времени используйте специализированные временные типы, а не строки.
- Учитывайте особенности СУБД: часовые пояса, значения по умолчанию, индексация, поддержка JSON.
Точный выбор типов на этапе проектирования уменьшает количество миграций, ошибок приложения и проблем с производительностью в будущем.
Ключевые выводы этого урока:
- Типы данных определяют, какие значения может хранить столбец, и напрямую влияют на качество данных.
- Числовые типы решают разные задачи: целые значения, точные дроби и приблизительные вычисления.
CHAR,VARCHARиTEXTвыбираются в зависимости от ожидаемой длины текста и особенностей хранения.- Для временных полей нужно использовать
DATE,TIMEиTIMESTAMP, а не обычный текст. - Правильный выбор типа данных на старте снижает риск ошибок, лишнего хранения и проблем с производительностью.
Часто задаваемые вопросы
В чем разница между DECIMAL и FLOAT?
DECIMAL хранит точные значения и подходит для денег. FLOAT хранит приблизительные значения и может давать погрешность округления, поэтому больше подходит для научных расчётов.
Что лучше использовать для имени и email: CHAR или VARCHAR?
В большинстве случаев используйте VARCHAR, потому что длина имени и email переменная. CHAR лучше подходит для полей фиксированной длины, например кодов страны.
NULL — это тип данных?
Нет. NULL означает отсутствие или неизвестность значения. Это специальный маркер, а не отдельный тип данных.
Вопросы для собеседования
Как выбрать между INTEGER, BIGINT и SMALLINT?
Нужно оценить ожидаемый диапазон значений и выбрать наименьший тип, который его безопасно покрывает. Это экономит место и помогает избежать переполнения.
Почему для денежных значений обычно выбирают DECIMAL?
Потому что DECIMAL хранит точные значения и не даёт ошибок округления, характерных для типов с плавающей точкой.
Какие проблемы вызывает неверный выбор типа данных?
Частые последствия: ошибки преобразования, некорректная сортировка и фильтрация, лишний расход памяти, более медленные запросы и усложнение логики приложения.