ГлавнаяУроки SQL → Урок 2. Типы данных

SQL - Урок 2. Типы данных

Этот урок носит больше теоретический характер, но пропустить его нельзя. В дальнейшем вы сможете возвращаться к нему, как к справочному уроку, сейчас же просто ознакомьтесь. В прошлом уроке говорилось, что MySQL поддерживает числовые, строковые, календарные данные и данные типа NULL. Рассмотрим их по очереди.

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

Тип данных Объем памяти Диапазон Описание
TINYINT (M) 1 байт от -128 до 127 или от 0 до 255 Целое число. Может быть объявлено положительным с помощью ключевого слова UNSIGNED, тогда элементам столбца нельзя будет присвоить отрицательное значение. Необязательный параметр М - количество отводимых под число символов. Необязательный атрибут ZEROFILL позволяет свободные позиции по умолчанию заполнить нулями.

Примеры:

TINYINT - хранит любое число в диапазоне от -128 до 127.

TINYINT UNSIGNED - хранит любое число в диапазоне от 0 до 255.

TINYINT (2) - предполагается, что значения будут двузначными, но по факту будет хранить и трехзначные.

TINYINT (3) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 002.
SMALLINT (M) 2 байта от -32768 до 32767 или от 0 до 65535 Аналогично предыдущему, но с большим диапазоном.

Примеры:

SMALLINT - хранит любое число в диапазоне от -32768 до 32767.

SMALLINT UNSIGNED - хранит любое число в диапазоне от 0 до 65535.

SMALLINT (4) - предполагается, что значения будут четырехзначные, но по факту будет хранить и пятизначные.

SMALLINT (4) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0002.
MEDIUMINT (M) 3 байта от -8388608 до 8388608 или от 0 до 16777215 Аналогично предыдущему, но с большим диапазоном.

Примеры:

MEDIUMINT - хранит любое число в диапазоне от -8388608 до 8388608.

MEDIUMINT UNSIGNED - хранит любое число в диапазоне от 0 до 16777215.

MEDIUMINT (4) - предполагается, что значения будут четырехзначные, но по факту будет хранить и семизначные.

MEDIUMINT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.
INT (M) или INTEGER (M) 4 байта от -2147683648 до 2147683648 или от 0 до 4294967295 Аналогично предыдущему, но с большим диапазоном.

Примеры:

INT - хранит любое число в диапазоне от -2147683648 до 2147683648.

INT UNSIGNED - хранит любое число в диапазоне от 0 до 4294967295.

INT (4) - предполагается, что значения будут четырехзначные, но по факту будет хранить максимально возможные.

INT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.
BIGINT (M) 8 байта от -263 до 263-1 или от 0 до 264 Аналогично предыдущему, но с большим диапазоном.

Примеры:

BIGINT - хранит любое число в диапазоне от -263 до 263-1.

BIGINT UNSIGNED - хранит любое число в диапазоне от 0 до 264.

BIGINT (4) - предполагается, что значения будут четырехзначные, но по факту будет хранить максимально возможные.

BIGINT (7) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0000002.
BOOL или BOOLEAN 1 байт либо 0, либо 1 Булево значение. 0 - ложь (false), 1 - истина (true).
DECIMAL (M,D) или DEC (M,D) или NUMERIC (M,D) M + 2 байта зависят от параметров M и D Используются для величин повышенной точности, например, для денежных данных. M - количество отводимых под число символов (максимальное значение - 64). D - количество знаков после запятой (максимальное значение - 30).

Пример:

DECIMAL (5,2) - будет хранить числа от -99,99 до 99,99.
FLOAT (M,D) 4 байта мин. значение +(-) 1.175494351 * 10-39
макс. значение +(-) 3. 402823466 * 1038
Вещественное число (с плавающей точкой). Может иметь параметр UNSIGNED, запрещающий отрицательные числа, но диапазон значений от этого не изменится. M - количество отводимых под число символов. D - количество символов дробной части.

Пример:

FLOAT (5,2) - будет хранить числа из 5 символов, 2 из которых будут идти после запятой (например: 46,58).
DOUBLE (M,D) 8 байт мин. значение +(-) 2.2250738585072015 * 10-308
макс. значение +(-) 1.797693134862315 * 10308
Аналогично предыдущему, но с большим диапазоном.

Пример:

DOUBLE - будет хранить большие дробные числа.


Необходимо понимать, чем больше диапазон значений у типа данных, тем больше памяти он занимает. Поэтому, если предполагается, что значения в столбце не будут превышать 100, то используйте тип TINYINT. Если при этом все значения будут положительными, то используйте атрибут UNSIGNED. Правильный выбор типа данных позволяет сэкономить место для хранения этих данных.

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

Тип данных Объем памяти Максимальный размер Описание
CHAR (M) M символов М символов Позволяет хранить строку фиксированной длины М. Значение М - от 0 до 65535.

Примеры:

CHAR (8) - хранит строки из 8 символов и занимает 8 байтов. Например, любое из следующих значений: '', 'Иван','Ирина', 'Сергей' будет занимать по 8 байтов памяти. А при попытке ввести значение 'Александра', оно будет усечено до 'Александ', т.е. до 8 символов.
VARCHAR (M) L+1 символов М символов Позволяет хранить переменные строки длиной L. Значение М - от 0 до 65535.

Примеры:

VARCHAR (3) - хранит строки максимум из 3 символов, но пустая строка '' занимает 1 байт памяти, строка 'a' - 2 байта, строк 'aa' - 3 байта, строка 'aaa' - 4 байта. Значение более 3 символов будет усечено до 3.
BLOB, TEXT L+2 символов 216-1 символов Позволяют хранить большие объемы текста. Причем тип TEXT используется для хранения именно текста, а BLOB - для хранения изображений, звука, электронных документов и т.д.
MEDIUMBLOB, MEDIUMTEXT L+3 символов 224-1 символов Аналогично предыдущему, но с большим размером.
LONGBLOB, LONGTEXT L+4 символов 232-1 символов Аналогично предыдущему, но с большим размером.
ENUM ('value1', 'value2', ...,'valueN') 1 или 2 байта 65535 элементов Строки этого типа могут принимать только одно из значений указанного множества.

Пример:

ENUM ('да', 'нет') - в столбце с таким типом может храниться только одно из имеющихся значений. Удобно использовать, если предусмотрено, что в столбце должен храниться ответ на вопрос.
SET ('value1', 'value2', ...,'valueN') до 8 байт 64 элемента Строки этого типа могут принимать любой или все элементы из значений указанного множества.

Пример:

SET ('первый', 'второй') - в столбце с таким типом может храниться одно из перечисленных значений, оба сразу или значение может отсутствовать вовсе.

Календарные типы данных

Тип данных Объем памяти Диапазон Описание
DATE 3 байта от '1000-01-01' до '9999-12-31' Предназначен для хранения даты. В качестве первого значения указывается год в формате "YYYY", через дефис - месяц в формате "ММ", а затем день в формате "DD". В качестве разделителя может выступать не только дефис, а любой символ отличный от цифры.
TIME 3 байта от '-838:59:59' до '838:59:59' Предназначен для хранения времени суток. Значение вводится и хранится в привычном формате - hh:mm:ss, где hh - часы, mm - минуты, ss - секунды. В качестве разделителя может выступать любой символ отличный от цифры.
DATATIME 8 байт от '1000-01-01 00:00:00' до '9999-12-31 23:59:59' Предназначен для хранения и даты и времени суток. Значение вводится и хранится в формате - YYYY-MM-DD hh:mm:ss. В качестве разделителей могут выступать любые символы отличные от цифры.
TIMESTAMP 4 байта от '1970-01-01 00:00:00' до '2037-12-31 23:59:59' Предназначен для хранения даты и времени суток в виде количества секунд, прошедших с полуночи 1 января 1970 года (начало эпохи UNIX).
YEAR (M) 1 байт от 1970 до 2069 для М=2 и от 1901 до 2155 для М=4 Предназначен для хранения года. М - задает формат года. Например, YEAR (2) - 70, а YEAR (4) - 1970. Если параметр М не указан, то по умолчанию считается, что он равен 4.

Тип данных NULL

Вообще-то это лишь условно можно назвать типом данных. По сути это скорее указатель возможности отсутствия значения. Например, когда вы регистрируетесь на каком-либо сайте, вам предлагается заполнить форму, в которой присутствуют, как обязательные, так и необязательные поля. Понятно, что регистрация пользователя невозможна без указания логина и пароля, а вот дату рождения и пол пользователь может указать по желанию. Для того, чтобы хранить такую информацию в БД и используют два значения:

NOT NULL (значение не может отсутствовать) для полей логин и пароль,

NULL (значение может отсутствовать) для полей дата рождения и пол.

По умолчанию всем столбцам присваивается тип NOT NULL, поэтому его можно явно не указывать.

Пример:

create table users (login varchar(20), password varchar(15), sex enum('man', 'woman') NULL, date_birth date NULL);

Таким образом, мы создаем таблицу с 4 столбцами: логин (не более 20 символов) обязательное, пароль (не более 15 символов) обязательное, пол (мужской или женский) не обязательное, дата рождения (тип дата) необязательное.

Все, на этом урок, посвященный типам данных, закончен. У вас, возможно, остались вопросы, но они исчезнут по мере освоения дальнейшего материала, т.к. на практике все становится более понятно, чем в теории.



Предыдущий урок Вернуться в раздел Следующий урок 

Научись программировать на Python прямо сейчас!



Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.


Уроки PHP Код кнопки:


Теперь нажмите кнопку, что бы не забыть адрес и вернуться к нам снова.