Типы данных

Что такое типы данных: определение, основные принципы, примеры и практические советы. Изучайте SQL для тестировщиков с подробными объяснениями для начинающих специалистов.

Типы данных.

Основные типы данных.

Тип данныхОписаниеПримеры
Integer (Int)Целые числа0, -100, 256, 34900
Float / DoubleЧисла с плавающей точкой0.1, -2.5, 100.25
StringСтроки — любое значение, заключенное в двойные кавычки”Привет”, “Apple”, “
BooleanЛогический типtrue или false
NullЗначение не задано или неизвестноnull
МассивКоллекция значений или просто список[“Ирина Петрова”, “Григорий Мишин”, “Алиса Тришина”, “Михаил Гвоздев”, “Мария Астапова”]
JSON (Объект)Ключ-значение{“name”: “Иван”, “surname”: “Иванов”}

Типы данных для колонок таблиц.

В SQL есть несколько распространённых типов данных, в том числе:

  • Строковый тип данных.
  • Числовой тип данных.
  • Булевый тип данных.
  • Дата и время.

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

ТипОписаниеДиапазон
CHAR(X)Содержит текстовые строки фиксированной длины0-255 символов
VARCHAR(X)Содержит текстовые строки динамической длины0-65,535 символов

Двоичные типы данных.

ТипОписаниеДиапазон
BINARY(X)Содержит двоичные строки фиксированной длины0-255 байт
VARBINARY(X)Содержит двоичные строки динамической длины0-65,535 байт

Большие текстовые и двоичные типы.

ТипОписаниеМаксимальная длина
BLOBСодержит двоичные данные65,535 байт
TEXTСодержит текстовые строки65,535 символов

BLOB и TEXT имеют дополнительные подтипы, которые отличаются максимальным размером данных, которые можно в них хранить.

Подтипы BLOB и TEXT.

ТипМаксимальная длинаОписание
TINYBLOB/TINYTEXT255 байт/символовСамые маленькие типы
MEDIUMBLOB/MEDIUMTEXT16,777,215 байт/символовСредние типы
LONGBLOB/LONGTEXT4,294,967,295 байт/символовСамые большие типы

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

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

Точные целые числа.

Точные целые числа

ТипОбъем памятиДиапазон
TINYINT1 байт-128 до 127 / 0 до 255
SMALLINT2 байта-32,768 до 32,767 / 0 до 65,535
MEDIUMINT3 байта-8,388,608 до 8,388,607 / 0 до 16,777,215
INT/INTEGER4 байта-2,147,483,648 до 2,147,483,647 / 0 до 4,294,967,295
BIGINT8 байт-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 / 0 до 18,446,744,073,709,551,615

Целые числа могут быть объявлены с ключевым словом UNSIGNED. В этом случае элементам данного столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон, которые принимает тип удваивается. Так, тип TINYINT может принимать значения от -128 до 127, а TINYINT UNSIGNED — от 0 до 255.

Точные вещественные числа.

Точные вещественные числа

ТипОписаниеПараметры
DEC/DECIMALТочное вещественное значениеM - общее количество цифр, D - количество после запятой

Тип DECIMAL хранит точное вещественное значение данных. Он используется, когда точность является критически важной. Например, при хранении финансовых данных.

Синтаксис DECIMAL эквивалентен DECIMAL(M) и DECIMAL(M,0). По умолчанию, параметр M равен 10.

Целая часть и часть после точки хранятся как 2 отдельных целых числа. На основании этого факта можно легко рассчитать затрачиваемый объем памяти. Так у DECIMAL(5,2) целая часть содержит 3 цифры и занимает 2 байта, часть после точки 2 цифры — достаточно 1 байта. Итого, на хранение будет потрачено 3 байта.

Битовые числа.

ТипОбъем памятиДиапазон
BIT[(M)]M битОт 1 до 64 битов, в зависимости от значения M.
BOOL BOOLEAN (синонимы)1 битЛибо 0, либо 1.

Тип данных BIT(M) хранит последовательность битов заданной длины. По умолчанию, длина составляет 8 бит. Если назначаемое значение в колонке с данным типом использует меньше M бит, то происходит дополнение нулями слева. Например, при попытке записать значение b’101’ в BIT(6) храниться в итоге будет b’000101’.

Приближенные числа.

ТипОбъем памятиДиапазон
FLOAT[(M, D)]4 байта±1.17·10^-39 до ±3.4·10^38
REAL[(M, D)]8 байтов±2.22·10^-308 до ±1.79·10^308
DOUBLE[(M, D)]8 байтов±2.22·10^-308 до ±1.79·10^308

Числовые типы данных с плавающей точкой также могут иметь параметр UNSIGNED. Как и в целочисленных типах, этот атрибут предотвращает хранение в отмеченном столбце отрицательных величин, но, в отличие от целочисленных типов, максимальный интервал для величин столбца остается прежним.

Дата и время.

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

ТипОписаниеДиапазон значений
DATEХранит значения даты в виде ГГГГ-ММ-ДД. Например, 2022-12-05от 1000-01-01 до 9999-12-31
TIMEХранит значения времени в формате ЧЧ:ММ:СС (или ЧЧЧ:ММ:СС для больших значений). Например, 800:50:50от -838:59:59 до 838:59:59
DATETIMEХранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2022-12-05 10:37:22от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMPХранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2022-12-05 10:37:22от 1970-01-01 00:00:01 до 2038-01-19 03:14:07

Отличие TIMESTAMP и DATETIME.

Типы данных DATETIME и TIMESTAMP в MySQL похожи друг на друга, так как оба направлены на хранение даты и времени. Но между ними есть ряд существенных отличий, определяющих какой из этих типов данных когда лучше использовать.

DATETIME.

Хранит значения в диапазоне от 1000-01-01 00:00:00 до

9999-12-31 23:59:59 и при этом занимает 8 байт. Этот тип данных не зависит от временной зоны, установленной в MySQL. Он всегда отображается ровно в таком виде, в котором был установлен и в котором хранится в базе данных. То есть при изменении часового пояса, отображение времени не изменится.

TIMESTAMP.

Хранит сколько прошло секунд с 1970-01-01 00:00:00 по нулевому часовому поясу и занимает 4 байта. При выборках отображается с учётом текущего часового пояса. Часовой пояс можно задать в настройках операционной системы, где работает MySQL, в глобальных настройках MySQL или в конкретной сессии. В базе данных при создании записи с типом TIMESTAMP значение сохраняется по нулевому часовому поясу.

Также стоит помнить о существующем ограничении TIMESTAMP в диапазоне возможных значений от 1970-01-01 00:00:01 до 2038-01-19 03:14:07, что ограничивает его применение. Так, данный тип данных не подойдёт для хранения дат рождения пользователей.

Способ задания значений.

Значения DATETIME, DATE и TIMESTAMP могут быть заданы одним из следующих способов:

  • Как строка в формате YYYY-MM-DD HH:MM:SS или в формате YY-MM-DD HH:MM:SS для указания даты и времени.
  • Как строка в формате YYYY-MM-DD или в формате YY-MM-DD для указания только даты.

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

Строковое представление временных данных.

Типы данных для работы с датами и временем

Тип данныхФорматПримеры
DATEYYYY-MM-DD2023-12-25
DATETIMEYYYY-MM-DD hh:mm:ss2023-12-25 14:30:00
TIMESTAMPYYYY-MM-DD hh:mm:ss2023-12-25 14:30:00
TIMEhh:mm:ss14:30:00
YEARYYYY или YY2023 или 23

Числовой тип данных в SQL.

Математические функции.

ФункцияСинтаксисОписание
POWPOW(num, power)Вычисляет число в указанной степени
SQRTSQRT(num)Вычисляет квадратный корень числа
LOGLOG(base, num)Вычисляет логарифм числа по указанному основанию
EXPEXP(num)Вычисляет экспоненту числа
SINSIN(num)Вычисляет синус числа
COSCOS(num)Вычисляет косинус числа
TANTAN(num)Вычисляет тангенс числа

Округление чисел.

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

Для округления числовых данных в SQL предусмотрены следующие 4 функции:

  • CEIL.
  • FLOOR.
  • ROUND.
  • TRUNCATE.

Функции CEIL, FLOOR направлены на то, чтобы округлять число к ближайшему целому числу в большую и в меньшую сторону соответственно.

Для округления к ближайшему целому числу есть функция ROUND, которая любое число, десятичная часть которого больше или равна 0.5, округляет в большую сторону, иначе в меньшую.

Функция ROUND также позволяет округлять число до некоторой части десятичных знаков после запятой. Для этого функция принимает второй необязательный аргумент с указанием количества знаков после запятой, которые требуется оставить.

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

Функция TRUNCATE аналогична функции ROUND, также способна принимать 2-й необязательный параметр, только вместо округления отбрасывает ненужные цифры.

Работа со знаковыми числами.

При работе с числовыми данными, в которых возможно наличие отрицательных значений, могут быть полезными функции SIGN и ABS.

  • Функция SIGN возвращает значение -1, если число отрицательно, 0, если число нулевое и 1, если число положительное.
  • Функция ABS возвращает абсолютное значение числа.