Из предыдущей главы вы узнали, что поля таблицы имеют ассоциированный с ним тип. Типом определяется тип данных, которые может хранить данное поле и помогает обеспечить целостность и непротиворечивость таблицы. MySQL имеет в своем арсенале достаточно широкий диапазон типов данных, которые можно классифицировать по следующим четырем общим категориям:
■ числовые типы;
■ строковые типы;
■ календарные типы;
■ сложные типы.
В следующем разделе все эти типы будут рассмотрены детально.
Числовые типы
Числовые типы MySQL в широком смысле можно разбить на две категории: целые числа и числа с плавающей точкой, или вещественные числа. В каждой их этих категорий имеется множество подтипов, каждый из которых может хранить данные различных размеров, кроме того, синтаксис MySQL позволяет определять, могут ли значения в цифровых полях иметь знак или дополняться нулями слева.
В табл. 5.1 представлены различные числовые типы данных и объем памяти, который отводится под каждый из них.
Типы данных MySQL
Тип INT
Пятью основными целыми типами, поддерживаемыми MySQL, являются TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT. Эти типы во многом подобны, отличаясь друг от друга диапазоном значений, которые они могут хранить. Рассмотрим следующий пример, в котором продемонстрирована их работа: 
Типы данных MySQL
MySQL поддерживает дополнение к стандарту SQL в виде необязательной спецификации длины, что позволяет дополнять значения до указанной длины при выборке значений из базы данных. Например, выборка полей, объявленных как INT(6), обеспечивает то, что значения, имеющие меньше 6 цифр, автоматически дополняются пробелами. Это показано в следующем примере.
Типы данных MySQL
Что у нас с нулями?
Не видите дополнения пробелами? Попробуйте воспользоваться специальным мо­дификатором ZEROFILL, который обсуждается ниже во врезке "Игры с цифрами".

Следует заметить, что использование спецификатора длины не влияет на размеры поля и диапазон сохраняемых им значений.
При попытке сохранить число, выходящее за пределы допустимого для данного типа диапазона, MySQL усечет его до ближнего значения, входящего в диапазон значений и сохранит в поле усеченное значение. Рассмотрим следующий пример, который демонстрирует попытку сохранить слишком большое значение в поле типа TINYINT. 
Типы данных MySQL
Игры с цифрами
Не знаете, каким образом вычислены диапазоны чисел? Это довольно просто - достаточно воспользоваться формулой от (2Л(п-1))*-1 до (2Л(п-1))-1 для знаковых диапазонов и от 0 до (2Лп)-1 для беззнаковых диапазонов, где п - размер в битах. Таким образом, вычисляя диапазон для типа INT, который является 4-байтовым (т.е. 32-х битовым) типом, по этой формуле получим:
от (2Л(п-1))*-1до (2Л(п-1))-1 = от-2147483648 до 2147483647
для знакового диапазона и
от 0 до (2Л32)-1 = от 0 до 4294967295
для беззнакового диапазона.
Кроме того, MySQL автоматически преобразует недопустимые значения в ноль перед вставкой в таблицу. Следующий пример демонстрирует попытку вставки строки в поле типа INT:
Типы данных MySQL
Объявление целых типов может сопровождаться одним или сразу двумя модификаторами, которые могут повлиять на их хранение и отображение.
■ Модификатор UNSIGNED задает хранение в поле только положительных значений, что увеличивает диапазон хранимых данным полем значений. ■ Модификатор ZEROFILL задает заполнение поля нулями (а не пробелами) при его выводе. Заметим, что применение этого модификатора предотвращает сохранение отрицательных значений.
Рассмотрим применение этих модификаторов на практике.
Типы данных MySQL