Типы данных в MySQL

В MySQL как и во многих языках программирования данные строго типизированы. Типизация данных помогает в организации и повышении оптимизации таблиц в базах данных MySQL.

В MySQL всего четыре группы типов данных:

  • Числовые
  • Строковые
  • Комплексные
  • Временные

Далее рассмотрим подробно каждый тип данных в MySQL.

Числовые типы данных в MySQL

Тип данных Размер Определение
INT(Size) 4 байта

Целое число от -2,147,483,648 до 2,147,483,647

INT UNSIGNED(Size) 4 байта Целое число от 0 до 4,294,967,295
INTEGER(Size) 4 байта Синоним для INT
TINYINT(Size) 1 байт Целое число от -128 до 127
TINYINT UNSIGNED(Size) 1 байт Целое число от 0 до 256
SMALLINT(Size) 2 байта Целое число от -32,768 до 32,767
SMALLINT UNSIGNED(Size) 2 байта Целое число от 0 до 465,535
MEDIUMINT(Size) 3 байта Целое число от -8,388,608 до 8,388,607
MEDIUMINT UNSIGNED(Size) 3 байта Целое число от 0 до 16777215
BIGINT(Size) 8 байт Целое число от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
BIGINT UNSIGNED(Size) 8 байт Целое число от 0 до 18,446,744,073,709,551,615
FLOAT(M,D) 4 байта

Десятичное число от -3.402823466E+38 до -1.175494351E-38, 0 и от 1.175494351E-38 до 3.402823466E+38, где M - количество выводимых цифр в числе (<=25), D - количество цифр после точки. М и D - не обязательны. По умолчанию M=10, D=2.

Пример: для FLOAT(5,2) промежуток допустимых значений будет от-999.99 до 999,99.

FLOAT(M,D) UNSIGNED 4 байта Тоже что и FLOAT только без отрицательных значений
DOUBLE(M,D) 8 байт

Десятичное число от -1.7976931348623157E+308 до -2.2250738585072014E-308, 0, и от 2.2250738585072014E-308 до 1.7976931348623157E+308, где M - количество выводимых цифр в числе (25 <= M <= 53), D - количество цифр после точки. М и D - не обязательны. По умолчанию M=16, D=4.

Пример: для DOUBLE(5,2) промежуток допустимых значений будет от-999.99 до 999,99.

DOUBLE(M,D) UNSIGNED 8 байт Тоже что и DOUBLE, только не допускает отрицательные значения

REAL(M,D)
DOUBLE PRESICION(M,D)

8 байт Синоним для DOUBLE
DECIMAL(M,D) зависит от количества цифр Тоже что и DOUBLE, только число хранится в виде строки. По умолчанию M=10, D=0.
DECIMAL(M,D) UNSIGNED 8 байт Тоже что и DECIMAL, только не допускает отрицательные значения
DEC(M,D)
NUMERIC(M,D)
8 байт Синонимы для DECIMAL

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

Тип данных Размер Определение
CHAR(Size) Зависит от кодировки Строка неизменяемой длины. Длина строки (Size) от 0 до 255
CHARACTER(Size) Зависит от кодировки Синоним для CHAR
BINARY(Size) 0-255 байт Версия CHAR для хранения бинарных данных
VARCHAR(Size) Зависит от кодировки Строка переменной длины. Длина строки (Size) от 0 до 65,532 (0-255 для версий ниже MySQL 5).  Если значение будет большее 65,532 (255), то оно сконвертируется в тип TEXT 
CHARACTER VARYING(Size) Зависит от кодировки Синоним для VARCHAR
VARBINARY(Size) 0-65,532 байт Версия VARCHAR для хранения бинарных данных.
TEXT Длина строки + 2 байта Строка с максимальной длинной в 65,535 символов
TINYTEXT Длина строки + 1 байт Строка с максимальной длинной в 255 символов
MEDIUMTEXT Длина строки + 3 байта Строка с максимальной длинной в 16,777,215 символов
LONGTEXT Длина строки + 4 байта Строка с максимальной длинной в 4,294,967,295 символов
BLOB  0-65,535 байт Binary Large OBjects. Может хранить до 65,535 байт бинарных данных (например картинки). Также используется наравне с TEXT для хранения текста.
TINYBLOB 0-255 байт Binary Large OBjects. Может хранить до 255 байт бинарных данных (например картинки). Также используется наравне с TINYTEXT для хранения текста.
MEDIUMBLOB 0-16,777,215 байт Binary Large OBjects. Может хранить до 16,777,215 байт бинарных данных (например картинки). Также используется наравне с MEDIUMTEXT для хранения текста.
LONGBLOB 0-4,294,967,295 байт Binary Large OBjects. Может хранить до 4,294,967,295 байт бинарных данных (например картинки). Также используется наравне с LONGTEXT для хранения текста.

Комплексные типы данных в MySQL

Тип данных Размер Определение
ENUM(a,b,c,...,n)

1-255 значений:
1 байт

256-65,535 значений:
2 байта

Список. Максимальное количество значений в списке - 65,535. Поле может принимать только одно значение из списка. При неверном значении оставляет поле пустым.
Пример поля: Gender ENUM("male","female").
SET(a,b,c,...,n)

1-8 значений:
1 байт

9-16 значений:
2 байта

17-24 значений:
3 байта

25-32 значений:
4 байта

33-64 значений:
8 байт

Список. Похож на ENUM, но поле может принимать несколько значений из списка. Максимальное количество значений в списке - 64.
Пример поля: Fruits SET("orange","apple","kiwi").

Временные типы данных в MySQL

Тип данных Размер Определение
DATE 3 байта Дата. Формат - YYYY-MM-DD. Допустимое значение от 1000-01-01 до 9999-12-31
DATETIME 8 байт Дата и время. Формат - YYYY-MM-DD HH:MM:SS. Допустимое значение от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP 4 байт Дата и время. Реагирует на изменения таблицы, устанавливает дату и время последнего изменения таблицы. Формат - YYYYMMDD HHMMSS. Допустимое значение от 1970-01-01 00:00:01 до 2038-01-09 03:14:07
TIME 3 байт Время. Формат - HH:MM:SS. Допустимое значение от 00:00:00 до 23:59:59
YEAR(Size) 1 байт Год. Формат - YYYY или YY. Допустимое значение от 1901 до 2155 или от 70 до 69 (1970 - 2069)