SQL код скопирован в буфер обмена
EN PT FR

Урок 1.4 · Время чтения: ~8 мин

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

Типы данных в SQL: INTEGER, VARCHAR, DATE и другие

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

Сравнение числовых, строковых и временных типов данных SQL при проектировании столбцов

Перед тем как разбирать подтипы, выделим основные группы типов данных в SQL:

  • Числовые типы: TINYINT, INT, BIGINT, DECIMAL, FLOAT
  • Строковые типы: CHAR, VARCHAR, TEXT
  • Типы даты и времени: DATE, TIME, DATETIME, TIMESTAMP
  • Специализированные типы: BOOLEAN, BLOB, JSON

Какие числовые типы данных есть в SQL?

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

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

Семейство INTEGER

Целочисленные типы хранят значения без дробной части.

ТипТипичный размерПримерный диапазон (со знаком)
TINYINT1 байтот -128 до 127
SMALLINT2 байтаот -32 768 до 32 767
INTEGER / INT4 байтаот -2 147 483 648 до 2 147 483 647
BIGINT8 байтот -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 хранит точные значения и не даёт ошибок округления, характерных для типов с плавающей точкой.

Какие проблемы вызывает неверный выбор типа данных?

Частые последствия: ошибки преобразования, некорректная сортировка и фильтрация, лишний расход памяти, более медленные запросы и усложнение логики приложения.

Урок 1.5: Понимание значений NULL в SQL