Типы данных в столбцах таблицы

Типы данных, поддерживаемые СУБД MySQL, можно разделить на четыре группы:

числа (Numbers);

текст (Text);

дата и время (Date and Time);

списки (Defined group).

Таблица 1. Числовые типы столбцовПараметр m обозначает общее количество знаков в числе, а d - количество знаков после запятой.
Тип Значение Требуемая память для хранения значения
TINYINT[(m)]     Целое число от 0 до 255 для беззнаковых и от -128 до 127 для знаковыхПример. TINYINT(2) – отображает значения от -9 до 99 для беззнаковых и от 0 до 99 для знаковых 1 байт
SMALLINT[(m)]   Целое число от 0 до 65535 для беззнаковых и от -32768 до 32767 для знаковых 2 байта
MEDIUMINT[(m)]   Целое число от 0 до 16 777 215 для беззнаковых и от -8 388 608 до 8 388 607 для знаковых 3 байта
INT[(m)]   Целое число от 0 до 4 294 967 295 для беззнаковых и от -2 147 683 648 до 2 147 483 647 для знаковых 4 байта
  BIGINT[(m)]   Целое число от 0 до 18 446 744 073 709 551 615 для беззнаковых и от 9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для знаковых 8 байт
FLOAT[(m,d)]   Число с плавающей точкой обычной (одинарной) точности. Значения допустимы в пределах от -3.402823466Е+38 до -1.175494351Е-38 и от 1.175494351Е-38 до 3.402823466Е+38Пример. Поле типа FLOAT(7,2) будет отображать значения как 9999.99 4 байта
DOUBLE[(m,d)]   Число с плавающей точкой двойной точности. Значения допустимы в пределах от -1.797693134862315 Е+308 До -2.2250738585072014 Е-308 и от 1.797693134862315 Е+308 до 3.402823466Е+38 8 байт
DECIMAL[(m,d)] Число с плавающей точкой, хранящееся в виде строки. Интервал значений тот же, что и для типа DOUBLE m+2 при DECIMAL>0m+1 при DECIMAL=0

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

Строковые типы СУБД MySQL приведены в таблице 2. Текстовое поле может хранить любые символы, а также произвольные двоичные данные, такие как изображения и звуки.

 

Таблица 2. Строковые типы столбцов
Тип Значение Требуемая память для хранения значения
CHAR(m) Строка фиксированной длины (m принимает значения от 1 до 255 символов).Любой введенный текст меньшей длины будет дополнен пробелами в конце строки. Любой текст большей длины будет обрезан до заданной m байт
VARCHAR(m) Строка переменной длины (m принимает значения от 1 до 65 535 символов). m+1 байт для записи длины строки
BLOB MEDIUMBLOB LONGBLOB Двоичная строка переменной длины до 65 535 символов, чувствительная к регистру. до 64 Кбайт до 16 Мб до 4 Гб
TINYTEXT Текстовая строка сверхмалого размера до 255 символов, нечувствительная к регистру m+1 байт (m<256)
TEXT MEDIUMTEXT LONGTEXT Строка с текстом малого размера до 65 535 символов до 64 Кбайт до 16 Мб до 4 Гб

Примечания.

 

Типы BLOB и TEXT используются для хранения изображений.

Типы CHAR и VARCHAR используются чаще всего. Единственное различие между ними заключается в том, что первый является типом с фиксированной длиной, а второй — с переменной. Все значения типа CHAR(m) занимают по m байт каждое, более короткие значения дополняются пробелами справа. Значения типа VARCHAR(m) занимают столько байт, сколько им необходимо, плюс один байт для хранения длины строки. При сохранении значений типа VARCHAR хвостовые пробелы отсекаются.

При выборе типов столбцов необходимо руководствоваться следующими принципами:

· при равных длинах значений типов CHAR и VARCHAR последний потребует больше памяти, так как для него требуется дополнительный байт для хранения длины значения;

· тип CHAR будет предпочтительней типа VARCHAR в том случае, если длина значений столбца изменяется незначительно. Причина этого заключается в том, что строки фиксированной длины обрабатываются эффективней строк переменной длины;

· за небольшим исключением, в одной таблице нельзя смешивать столбцы типа CHAR и VARCHAR;

· типы CHAR, BLOB и TEXT несовместимы и не могут присутствовать в одной таблице;

· для столбцов типа BLOB и TEXT не может быть задан атрибут DEFAULT.

 

Списки

В MySQL имеются два типа списков: ENUM (перечисление), SET (множество). Описание указанных типов приведено в таблице 3.

 

Таблица 3. Типы списков

 

Тип Значение Требуемая память для хранения значения
ПеречислениеENUM ('значениеl', 'значение2',...) Значения в столбце могут принимать только одно из текстовых значений набора. Набор может содержать до 65535 различных элементов. Например, столбец, определенный как ENUM ('один','два') может принимать такие значения: 'один', 'два'. 1 байт, если в наборе меньше 256 элементов, иначе – 2 байта
МножествоSET('значениеl', 'значение2',...) Значения в столбце могут принимать несколько значений из набора. Набор может содержать до 64 различных элементов. Например, столбец, определенный как SET('один','два') может принимать такие значения: 'один' ,'два' ,'один два' от 1 до 8 байт в зависимости от количества перечисленных элементов множества

Примечание. В поле типа ENUM не рекомендуется сохранять числа, так как это может привести к излишней путанице и задавать тип ENUM желательно вместе с параметром NOT NULL.

 

Например, объявить столбец pol типом «перечень», принимающим значения «Муж» и «Жен» можно следующим образом: pol ENUM ('Муж','Жен') NOT NULL

 

 

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

Типы календарных данных, имеющиеся в СУБД MySQL, показаны в таблице 4. Здесь YY, MM, DD, hh, mm и ss соответствуют годам, месяцам, дням, часам, минутам и секундам.

Таблица 4. Столбцы календарного типа
Тип Значение
DATE Дата в формате "YYYY-MM-DD"
TIME Время в формате "hh:mm:ss"
DATETIME Дата и время в формате "YYYY-MM-DD hh:mm:ss "
TIMESTAMP   Значение временной отметки в формате "YYYYMMDDhhmmss" начиная с 19700101000000 и заканчивая неопределенной датой в 2037 году. Этот диапазон привязан к таймеру ОС UNIX, в котором отсчет начинается с первого дня 1970 года, который является "нулевой датой", или "началом эпохи" ОС UNIX. Столбец типа TIMESTAMP (временная отметка) имеет такое название потому, что он записывается в момент создания или модификации записи.
YEAR [(2|4)] Значение года в формате "YY" или "YYYY"

Примечание. Даты должны задаваться в порядке год-месяц-день.

 

Полный формат TIMESTAMP составляет 14 десятичных разрядов, но можно создавать поля типа TIMESTAMP и меньшей длины

Преобразовать отображение даты в более удобный для восприятия вид можно при помощи внутренней функции MySQL:

date_format (имя_столбца, формат)

Указанная функция форматирует данные столбца календарного типа, указанного в параметре имя_столбца в соответствии со строкой формат. В строке формат могут использоваться следующие определители формата:

%Y год, 4 цифры

%y год, 2 цифры

%M название месяца (january, desember и т.д. )

%m номер месяца, число (01-12)

%b сокращенное наименование месяца месяца (jan, des и т.д.)

%c номер месяца, число (1-12)

%d день месяца: число (01-31)

%e день месяца: число (1-31)

 

Пример. Рассмотрим пример форматирования столбца day, объявленного в таблице table как day DATETIME:

 

mysq1> SELECT DATE_FORMAT(day,'%d.%m.%Y %k:%i') FROM table

 

До применения команды форматирования содержимое столбца day отображалось в следующем виде: 2004-10-07 13:26:12

После форматирования будет получен следующий результат: 07.10.2004 13:26