Сообщить об ошибке.

MySQL: Типы хранимых данных

При определении столбцов таблицы в БД MySQL необходимо указывать тип хранимых данных. Тип данных определяет, какие значения могут храниться в конкретном столбце и их размер (сколько они будут занимать места).

База данных MySQL может хранить следующие типы данных.

Типы MySQL для хранения строковых данных:

MySQL-типОписание
CHAR(size)Представляет строку фиксированной длины.Длина хранимой строки указывается в скобках, например, CHAR(10) - строка из десяти символов. Если в данный столбец сохраняется строка из 6 символов (то есть меньше установленной длины в 10 символов), то строка дополняется 4 пробелами и в итоге все равно будет занимать 10 символов. Тип CHAR может хранить до 255 байт.
VARCHAR(size)Представляет строку переменной длины. Длина хранимой строки также указывается в скобках, например, VARCHAR(10). В отличие от CHAR хранимая строка будет занимать именно столько места, сколько необходимо. Например, если определенная длина в 10 символов, но в столбец сохраняется строка в 6 символов, то хранимая строка так и будет занимать 6 символов плюс дополнительный байт, который хранит длину строки. Всего тип VARCHAR может хранить до 65535 байт.
Начиная с MySQL 5.6 типы CHAR и VARCHAR по умолчанию используют кодировку UTF-8, которая позволяет использовать до 3 байт для хранения символа в зависимости от языка ( для многих европейских языков по 1 байту на символ, для ряда восточно-европейских и ближневосточных - 2 байта, а для китайского, японского, корейского - по 3 байта на символ).
BINARY(size)Похож на CHAR(), но хранит двоичные байтовые строки. Параметр size задает длину столбца в байтах. Значение по умолчанию равно 1
VARBINARY(size)Похож на VARCHAR(), но хранит строки двоичных байтов. Параметр size указывает максимальную длину столбца в байтах.
TINYBLOBХранит бинарные данные в виде строки длиной до 255 байт.
TINYTEXTПредставляет текст длиной до 255 байт.
TEXT(size)Представляет текст длиной до 65 КБ.
BLOB(size)Для больших двоичных объектов. Вмещает до 65 535 байт данных
MEDIUMTEXTПредставляет текст длиной до 16 МБ
MEDIUMBLOBДля больших двоичных объектов. Вмещает до 16,777,215 байт данных
LONGTEXTПредставляет текст длиной до 16 МБ
LONGBLOBДля больших двоичных объектов. Вмещает до 4,294,967,295 байт данных
ENUM(val1, val2, val3, ...)Строковый объект, который может иметь только одно значение, выбранное из списка возможных значений. В списке ENUM можно указать до 65535 значений. Если вставляется значение, которого нет в списке, будет вставлено пустое значение. Значения сортируются в порядке их ввода.
SET(val1, val2, val3, ...)Строковый объект, который может иметь 0 или более значений, выбранных из списка возможных значений. В списке SET можно перечислить до 64 значений.

Дополнительно смотрите материал "Функции БД MySQL для работы со строками".

Типы MySQL для хранения числовых данных:

MySQL-типОписание
BIT(size)Тип битового значения. Количество битов на значение указывается в size. Параметр size может содержать значение от 1 до 64. Значение по умолчанию для размера равно 1.
BOOLФактически не представляет отдельный тип, а является лишь псевдонимом для типа TINYINT(1) и может хранить два значения 0 и 1. Однако данный тип может также в качестве значения принимать встроенные константы TRUE (представляет число 1) и FALSE (предоставляет число 0).
BOOLEANПсевдоним для BOOL
TINYINTПредставляет целые числа от -128 до 127, занимает 1 байт
TINYINT UNSIGNEDПредставляет целые числа от 0 до 255, занимает 1 байт
SMALLINTНебольшое целое число со знаком. Диапазон: от -32768 до 32767.
SMALLINT UNSIGNEDНебольшое целое число без знака от 0 до 65535.
MEDIUMINTСреднее целое число со знаком: от -8388608 до 8388607.
MEDIUMINT UNSIGNEDСреднее целое число без знака: от 0 до 16777215.
INTЦелое число со знаком: от -2147483648 до 2147483647.
INT UNSIGNEDЦелое число без знака: от 0 до 4294967295.
INTEGERПсевдоним для INT
BIGINT Большое целое число со знаком: от 9223372036854775808 до 9223372036854775807.
BIGINT UNSIGNEDБольшое целое число без знака: от 0 до 18446744073709551615.
FLOATХранит вещественные числа с плавающей точкой одинарной точности от -3.4028 * 1038 до 3.4028 * 1038, занимает 4 байта. Может принимать форму FLOAT(size, d), где `size` - общее количество цифр, а `d` - количество цифр после запятой. Этот синтаксис устарел в MySQL 8.0.17 и будет удален в будущих версиях MySQL.
FLOAT(p)Число с плавающей запятой. MySQL использует значение `p`, чтобы определить, следует ли использовать FLOAT или DOUBLE для результирующего типа данных. Если `p` находится в диапазоне от 0 до 24, то тип данных становится FLOAT(). Если `p` от 25 до 53, тип данных становится DOUBLE().
DOUBLEЧисло с плавающей запятой нормального размера двойной точности от -1.7976 * 10308 до 1.7976 * 10308, занимает 8 байт. Также может принимать форму DOUBLE(size, d). Общее количество цифр указывается в параметре `size`. Количество знаков после запятой указывается в параметре `d`.
DECIMAL(size, d)Точное число с фиксированной точкой. Общее количество цифр указывается в параметре `size`. Количество знаков после запятой указывается в параметре `d`. Максимальное число для `size` - 65. Максимальное число для `d` - 30. Значение по умолчанию для `size` - 10. Значение по умолчанию для `d` - 0.
DEC(size, d)Псевдоним для DECIMAL(size,d)

Дополнительно смотрите материал "Математические функции БД MySQL".

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

MySQL-типОписание
DATEхранит даты с 1 января 1000 года до 31 деабря 9999 года (c "1000-01-01" до "9999-12-31"). По умолчанию для хранения используется формат yyyy-mm-dd. Занимает 3 байта.
DATETIME(fsp)объединяет время и дату, диапазон дат и времени - с 1 января 1000 года по 31 декабря 9999 года (с "1000-01-01 00:00:00" до "9999-12-31 23:59:59"). Для хранения по умолчанию используется формат "yyyy-mm-dd hh:mm:ss". Занимает 8 байт.
TIMESTAMP(fsp)Временная метка. Значения TIMESTAMP сохраняются как количество секунд, прошедших с эпохи Unix (`1970-01-01 00:00:00` UTC). Формат: YYYY-MM-DD hh:mm:ss. Поддерживаемый диапазон составляет от '1970-01-01 00:00:01' UTC до '2038-01-09 03:14:07' UTC. Автоматическую инициализацию и обновление до текущей даты и времени можно указать с помощью DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP в определении столбца таблицы.
TIME(fsp)хранит время от -838:59:59 до 838:59:59. По умолчанию для хранения времени применяется формат "hh:mm:ss". Занимает 3 байта.
YEARхранит год в виде 4 цифр. Диапазон доступных значений от 1901 до 2155. Занимает 1 байт.

Дополнительно смотрите материал "Функции БД MySQL для работы с датой и временем".

MySQL-тип DATE может принимать даты в различных форматах, но непосредственно для хранения в самой БД даты приводятся к формату 'yyyy-mm-dd'. Некоторые из принимаемых форматов:

  • yyyy-mm-dd - 2022-06-24
  • yyyy-m-dd - 2022-6-24
  • yyyymmdd - 20220624
  • yyyy.mm.dd - 2022.06.24
  • yy-m-dd - 22-06-24

В формате yy-m-dd двузначные числа от 00 до 69 воспринимаются как даты в диапазоне 2000-2069. А числа от 70 до 99 как диапазон чисел 1970 - 1999.

Для времени MySQL-тип TIME использует 24-часовой формат. Он может принимать время в различных форматах:

  • hh:mi - 2:31 (хранимое значение 03:31:00)
  • hh:mi:ss - 14:31:34
  • hhmiss - 143134

Примеры значений для MySQL-типов DATETIME и TIMESTAMP:

  • 2022-06-24 14:31:34 (хранимое значение 2022-06-24 14:31:34)
  • 2022-06-24 (хранимое значение 2022-06-24 00:00:00)