У вас уже должно быть сформировано общее представление о возможностях SQL и о его применении в контексте управления базами данных MySQL. После рассмотрения вводного материала, перейдем к углубленному изучению аспектов использования набора команд MySQL.
Как было сказано в предыдущей главе, все столбцы таблиц MySQL сопровождаются типом данных. Тип данных играет немаловажную роль в обеспечении целостности данных баз данных MySQL и в оптимизации использования и обработки этих данных. В этой главе обсуждаются различные типы данных, имеющиеся в MySQL. Кроме того, приведено множество примеров их использования.

Логическое обоснование типов данных
Перед тем как углубиться в хитросплетения числовых и строковых типов данных, неплохо было бы вернуться назад и оценить те преимущества, которые сулит использование типов данных в MySQL (и, собственно, во всех остальных СУБД.)
Самым веским аргументом в пользу использования типов данных является их эффективность (при хранении данных) и скорость (при выборке данных). Чтобы лучше понять это, рассмотрим данную проблему исходя из противного. Предположим, что в определенной системе типы данных отсутствуют и все данные хранятся в символическом или строковом виде. В такой системе любые числа (будь то целые числа, даты, денежные величины) будут храниться в виде строк и занимать столько места, сколько байтов насчитывается в строке. Поэтому число 12345678987654321 займет 17 байтов, а для хранения даты 06-04-1978 потребуется 10 байтов (или более, если вы решили хранить каждый элемент даты в отдельном столбце).
Более того, строковое представление чисел и дат затрудняет манипуляцию ими: сложение, вычитание и умножение становится сложной и неоднозначной задачей, вынуждая разработчика предварительно преобразовать строку в числовое представление, чтобы затем производить над ними определенные действия. Очевидно, что выполнение операций сравнения и равенства для чисел или дат, представленных строками, также усложняется; истинность операции сравнения 13 > 2 очевидна, но вот истинность утверждения "13" > "2" установить значительно сложнее. Аналогично, очевидно, что 1 апреля 2003, в представлении 01-04-2003 следует раньше 1 сентября 2004, представленного 01-09-2004, но такой тест усложняется при проведении его над строковым представлением этих дат, т.к. система не будет знать, как различить день, месяц и год.
Все эти проблемы решает разбиение данных по типам. Стабильная схема применения различных типов данных делает возможным распознавание определенных данных как тех, что принадлежат к определенному типу, а значит и использование этой информации при их обработке. Например, значение "01-04-2003" помечается как принадлежащее к известному типу DATE, а система для работы с этим типом данных пользуется встроенными правилами, которые сообщают, как обращаться с типом данных DATE, - будь то операции сравнения дат, прибавление к ним дней или сразу месяцев, а идентификация ошибочных значений значительно упрощается.
Назначение строгих типов данных ассоциирует с каждым типом определенное поведение, обеспечивая защиту от ошибок, связанных с человеческим фактором. Самым типичным уже стал пример сложения строковых и цифровых данных. Язык программирования со слаборазвитой системой типов это позволяет, в то время как язык с сильным распределением типов сразу же заблокирует такую операцию как попытку нарушить целостность системы и запретит ее выполнение. Таким образом, присвоение данным определенных типов снижает неопределенность взаимодействия между различными данными, уменьшая тем самым объем кода, который должен написать разработчик для обеспечения целостности системы.
Кроме того, присвоение данным определенных типов приводит к более эффективному использованию пространства, приводя одновременно к уменьшению пространства, необходимого для сохранения, и к увеличению производительности. Например, если система способна распознать значение 12345678987654321 как число, а не строку, она сможет сохранить его в более эффективном виде (как 8-байтовое целое число, а не как 17-байтовую строку), занимая тем самым меньше места в памяти и упрощая выполнение над ней арифметических операций. Влияние на производительность будет не менее существенной: восьмибайтовое целое число можно обработать быстрее, чем семнадцатибайтовое строковое значение. Добавьте к этому сэкономленные байты, и вы убедитесь в том, что использование типов данных приносит существенную выгоду.
Но использование типов данных может иметь и негативные последствия. Рациональное использование этой возможности приведет к уменьшению размеров баз данных и таблиц, эффективному индексированию и ускорению обработки запросов. В это же время безразличное, "топорное" использование типов приводит к раздутым таблицам, неэффективному использованию памяти и индексов, а значит, и падению производительности. Поэтому до разработки приложения, работающего с базами данных, опытные разработчики обязательно стараются узнать как можно больше обо всех типах данных, которые используются в базе данных.
Итак, давайте перейдем к обсуждению различных типов данных, представленных
в MySQL.