При определении столбцов таблицы для них необходимо указать тип данных. Каждый столбец должен иметь тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.
MySQL предоставляет следующие типы данных, которые можно разбить на ряд групп.
Символьные типы
- CHAR: представляет стоку фиксированной длины.Длина хранимой строки указыватся в скобках, например,
CHAR(10)— строка из десяти символов. И если в таблицу в данный столбец сохраняется строка из 6 символов (то есть меньше установленной длины в 10 символов), то строка дополняется 4 проблеми и в итоге все равно будет занимать 10 символов - VARCHAR: представляет стоку переменной длины.Длина хранимой строки также указыватся в скобках, например,
VARCHAR(10). Однако в отличие от CHAR хранимая строка будет занимать именно столько места, скольо необходимо. Например, если определеная длина в 10 символов, но в столбец сохраняется строка в 6 символов, то хранимая строка так и будет занимать 6 символов плюс дополнительный байт, который хранит длину строки.
Начиная с MySQL 5.6 типы CHAR и VARCHAR по умолчанию используют кодировку UTF-8, которая позволяет использовать до 3 байт для хранения символа в заивисимости от языка ( для многих европейских языков по 1 байту на символ, для ряда восточно-европейских и ближневосточных — 2 байта, а для китайского, яполнского, корейского — по 3 байта на символ).
Ряд дополнительных типов данных представляют текст неопределенной длины:
- TINYTEXT: представляет текст длиной до 255 байт.
- TEXT: представляет текст длиной до 65 КБ.
- MEDIUMTEXT: представляет текст длиной до 16 МБ
- LARGETEXT: представляет текст длиной до 4 ГБ
Числовые типы
- TINYINT: представляет целые числа от -127 до 128, занимает 1 байт
- BOOL: фактически не представляет отдельный тип, а является лишь псевдонимом для типа
TINYINT(1)и может хранить два значения 0 и 1. Однако данный тип может также в качестве значения принимать встроенные константы TRUE (представляет число 1) и FALSE (предоставляет число 0).Также имеет псевдоним BOOLEAN. - TINYINT UNSIGNED: представляет целые числа от 0 до 255, занимает 1 байт
- SMALLINT: представляет целые числа от -32768 до 32767, занимает 2 байтa
- SMALLINT UNSIGNED: представляет целые числа от 0 до 65535, занимает 2 байтa
- MEDIUMINT: представляет целые числа от -8388608 до 8388607, занимает 3 байта
- MEDIUMINT UNSIGNED: представляет целые числа от 0 до 16777215, занимает 3 байта
- INT: представляет целые числа от -2147483648 до 2147483647, занимает 4 байта
- INT UNSIGNED: представляет целые числа от 0 до 4294967295, занимает 4 байта
- BIGINT: представляет целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, занимает 8 байт
- BIGINT UNSIGNED: представляет целые числа от 0 до 18 446 744 073 709 551 615, занимает 8 байт
- DECIMAL: хранит числа с фиксированной точностью. Данный тип может принимать два параметра
precisionиscale:DECIMAL(precision, scale).Параметрprecisionпредставляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 65.Параметрscaleпредставляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.Например, в определении следующего столбца:1salaryDECIMAL(5,2)Число 5 —precision, а число 2 —scale, поэтому данный столбец может хранить значения из диапазона от -999.99 до 999.99.Размер данных в байтах для DECIMAL зависит от хранимого значения.Данный тип также имеет псевдонимы NUMERIC, DEC, FIXED. - FLOAT: хранит дробные числа с плавающей точкой одинарной точности от -3.4028 * 1038 до 3.4028 * 1038, занимает 4 байтаМожет принимать форму
FLOAT(M,D), гдеM— общее количество цифр, аD— количество цифр после запятой. - DOUBLE: хранит дробные числа с плавающей точкой двойной точности от -1.7976 * 10308 до 1.7976 * 10308, занимает 8 байт. Также может принимать форму
DOUBLE(M,D), гдеM— общее количество цифр, аD— количество цифр после запятой.Данный тип также имеет псевдонимы REAL и DOUBLE PRECISION, которые можно использовать вместо DOUBLE.
Типы для работы с датой и временем
- DATE: хранит даты с 1 января 1000 года до 31 деабря 9999 года (c «1000-01-01» до «9999-12-31»). По умолчанию для хранения используется формат yyyy-mm-dd. Занимает 3 байта.
- TIME: хранит время от -838:59:59 до 838:59:59. По умолчанию для хранения времени применяется формат «hh:mm:ss». Занимает 3 байта.
- DATETIME: объединяет время и дату, диапазон дат и времени — с 1 января 1000 года по 31 декабря 9999 года (с «1000-01-01 00:00:00» до «9999-12-31 23:59:59»). Для хранения по умолчанию используется формат «yyyy-mm-dd hh:mm:ss». Занимает 8 байт
- TIMESTAMP: также хранит дату и время, но в другом диапазоне: от «1970-01-01 00:00:01» UTC до «2038-01-19 03:14:07» UTC. Занимает 4 байта
- YEAR: хранит год в виде 4 цифр. Диапазон доступных значений от 1901 до 2155. Занимает 1 байт.
Тип Date может принимать даты в различных форматах, однако непосредственно для хранения в самой бд даты приводятся к формату «yyyy-mm-dd». Некоторые из принимаемых форматов:
yyyy-mm-dd—2018-05-25yyyy-m-dd—2018-5-25yy-m-dd—18-05-25В таком формате двузначные числа от 00 до 69 воспринимаются как даты в диапазоне 2000-2069. А числа от 70 до 99 как диапазон чисел 1970 — 1999.yyyymmdd—20180525yyyy.mm.dd—2018.05.25
Для времени тип Time использует 24-часовой формат. Он может принимать время в различных форматах:
hh:mi—3:21(хранимое значение03:21:00)hh:mi:ss—19:21:34hhmiss—192134
Примеры значений для типов DATETIME и TIMESTAMP:
2018-05-25 19:21:342018-05-25(хранимое значение2018-05-25 00:00:00)
Составные типы
- ENUM: хранит одно значение из списка допустимых значений. Занимает 1-2 байта
- SET: может хранить несколько значений (до 64 значений) из некоторого списка допустимых значений. Занимает 1-8 байт.
Бинарные типы
- TINYBLOB: хранит бинарные данные в виде строки длиной до 255 байт.
- BLOB: хранит бинарные данные в виде строки длиной до 65 КБ.
- MEDIUMBLOB: хранит бинарные данные в виде строки длиной до 16 МБ
- LARGEBLOB: хранит бинарные данные в виде строки длиной до 4 ГБ