Типы данных
Что такое типы данных: определение, основные принципы, примеры и практические советы. Изучайте 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/TINYTEXT | 255 байт/символов | Самые маленькие типы |
MEDIUMBLOB/MEDIUMTEXT | 16,777,215 байт/символов | Средние типы |
LONGBLOB/LONGTEXT | 4,294,967,295 байт/символов | Самые большие типы |
Числовой тип данных.
Числовые данные разделяются на точные и приближенные, на целые и вещественные. В отдельную категорию можно отнести битовые значения.
Точные целые числа.
Точные целые числа
Тип | Объем памяти | Диапазон |
---|---|---|
TINYINT | 1 байт | -128 до 127 / 0 до 255 |
SMALLINT | 2 байта | -32,768 до 32,767 / 0 до 65,535 |
MEDIUMINT | 3 байта | -8,388,608 до 8,388,607 / 0 до 16,777,215 |
INT/INTEGER | 4 байта | -2,147,483,648 до 2,147,483,647 / 0 до 4,294,967,295 |
BIGINT | 8 байт | -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 для указания только даты.
При указании даты допускается использовать любой знак пунктуации в качестве разделительного между частями разделов даты или времени. Также возможно задавать дату вообще без разделительного знака, слитно.
Строковое представление временных данных.
Типы данных для работы с датами и временем
Тип данных | Формат | Примеры |
---|---|---|
DATE | YYYY-MM-DD | 2023-12-25 |
DATETIME | YYYY-MM-DD hh:mm:ss | 2023-12-25 14:30:00 |
TIMESTAMP | YYYY-MM-DD hh:mm:ss | 2023-12-25 14:30:00 |
TIME | hh:mm:ss | 14:30:00 |
YEAR | YYYY или YY | 2023 или 23 |
Числовой тип данных в SQL.
Математические функции.
Функция | Синтаксис | Описание |
---|---|---|
POW | POW(num, power) | Вычисляет число в указанной степени |
SQRT | SQRT(num) | Вычисляет квадратный корень числа |
LOG | LOG(base, num) | Вычисляет логарифм числа по указанному основанию |
EXP | EXP(num) | Вычисляет экспоненту числа |
SIN | SIN(num) | Вычисляет синус числа |
COS | COS(num) | Вычисляет косинус числа |
TAN | TAN(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 возвращает абсолютное значение числа.