Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Типы столбцов в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Типы столбцов в MySQL

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

Дело в том, что для каждого типа данных необходимо выделить какое-то место в памяти, а потом как-то эти данные обработать. Выделяемое место и алгоритм обработки напрямую зависят от типа данных. Следовательно, надо определять тип столбца, чтобы указать, какие именно данные в нем хранятся, сколько места им нужно и что с ними можно делать.

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

Обзор преднамеренно краток. Ниже следуют более подробные описания, с которыми нужно сверяться для получения дополнительной информации относительно специфических типов столбцов, типа допустимых форматов значений, которые вы можете определять. Изучите эту тему подробно. Дело в том, что само функционирование базы данных зависит от того, насколько правильно вы зададите типы столбцов в таблице.

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

М. Указывает максимальный размер отображения. Максимальный допустимый размер отображения равен 255. Что такое отображение, будет подробно рассмотрено позднее на конкретных примерах.

D. Точность числа данного типа. Применяется к типам с плавающей запятой и указывает число цифр после десятичной отметки. Максимальное возможное значение равно 30, но должно быть не больше, чем М-2.

Квадратные скобки ([ и ]) указывают части спецификаторов типа, которые являются факультативными.

Обратите внимание, что, если вы определяете для столбца параметр ZEROFILL, MySQL автоматически добавит к столбцу атрибут UNSIGNED.


TINYINT[(М)] [UNSIGNED] [ZER0FILL]

Очень маленькое целое число. Диапазон значений со знаком от -128 до 127. Диапазон значений без знака от 0 до 255.


SMALLINT[(М)] [UNSIGNED] [ZER0FILL]

Маленькое целое число. Диапазон со знаком от -32768 до 32767. Диапазон без знака от 0 до 65535.


MEDIUMINT[(М)] [UNSIGNED] [ZEROFILL]

Целое число средних размеров. Диапазон со знаком от -8388608 до 8388607. Диапазон значений без знака от 0 до 16777215.


INT[(М)] [UNSIGNED] [ZEROFILL]

Целое число нормального размера. Диапазон значений со знаком от -2147483648 до 2147483647. Диапазон значений без знака от 0 до 4294967295.


INTEGER[(М)] [UNSIGNED] [ZER0FILL]

Синоним для типа INT.


BIGINT[(М)] [UNSIGNED] [ZEROFILL]

Большое целое число. Диапазон значений со знаком от -9223372036854775808 до 9223372036854775807. Диапазон значений без знака от 0 до 18446744073709551615.

Некоторые подробности, которые вы должны знать относительно столбцов типа BIGINT:

  • поскольку вся арифметика в пакете на самом деле выполнена с использованием значения типов BIGINT или DOUBLE, вы не должны использовать большие целые числа без знака, которые имеют значение по модулю большее, чем 9223372036854775807 (63 бита) за исключением битовых функций! Если вы это сделаете, некоторые из последних цифр в результате могут быть ошибочными из-за округления при преобразовании BIGINT в DOUBLE;
  • вы можете всегда сохранять точное целочисленное значение в столбце BIGINT, сохраняя его как строку, в этом случае не будет никакого промежуточного двойного представления;
  • в MySQL 4.0 вы можете использовать целые числа, чтобы сохранить большие значения без знака в строках BIGINT;
  • операции -, + и * используют арифметику BIGINT, когда оба параметра представляют собой значения типа INTEGER. Это означает, что если вы умножаете два больших целых числа (или результаты функций, которые возвращают целые числа), вы можете получить непредвиденные результаты, когда результат больше, чем 9223372036854775807.

FLOAT(precision) [ZEROFILL]

Число с плавающей запятой. Обязательно со знаком. Точность (precision) может быть в пределах <=24, для числа с одиночной точностью, или между 25 и 53, для числа двойной точности. Эти типы подобны FLOAT и DOUBLE, описанным ниже. FLOAT(X) имеет тот же самый диапазон, что и соответствующие типы FLOAT и DOUBLE, но размер отображения и число десятичных чисел неопределенны. В MySQL версии 3.23 это и есть истинное значение с плавающей запятой.

В старых версиях MySQL FLOAT(precision) всегда имеет 2 десятичных числа. Обратите внимание, что использование типа FLOAT может создавать вам некоторые непредвиденные проблемы, поскольку все вычисления в MySQL всегда выполнены с двойной точностью.


FLOAT[(М,D)] [ZEROFILL]

Маленькое (с одиночной точностью) число с плавающей запятой. Не может быть без знака. Допустимые значения от -3.402823466Е+38 до -1.175494351Е-38, 0 и от 1.175494351Е-38 до 3.402823466Е+38. М задает размер отображения, a D определяет количество десятичных чисел. Соответствует FLOAT (X), где X <= 24.


DOUBLE[(M,D)] [ZEROFILL]

Число нормального размера (двойная точность) с плавающей запятой. Не может быть без знака. Допустимые значения от -1.7976931348623157Е+308 до -2.2250738585072014Е-308, 0 и от 2.2250738585072014Е-308 до 1.7976931348623157Е+308. М задает размер отображения, a D - число десятичных чисел. Соответствует DOUBLE без параметра или FLOAT(X), где 25 <= X <= 53.


DOUBLE PRECISION[(M,D)] [ZEROFILL] MREAL[(M,D)] [ZEROFILL]

Синонимы для типа DOUBLE.


DECIMAL[(M[,D])] [ZEROFILL]

Распакованное число с плавающей запятой. Не может быть без знака! Ведет себя подобно столбцу CHAR: «распакованный» означает, что число сохранено как строка символов с использованием отдельного символа для каждой цифры значения. Десятичная отметка и знак минус для отрицательных чисел не рассчитана в М (но место для них зарезервировано). Если D=0, значения не будут иметь никакой десятичной отметки или дробной части. Максимальный диапазон значений DECIMAL аналогичен DOUBLE, но фактический диапазон для данного конкретного столбца DECIMAL может быть задан через М и D.

Если D не задано, оно будет установлено в 0. Если же не задано М, оно считается равным 10. Обратите внимание, что в MySQL 3.22 аргумент М должен включать место, необходимое для знака и десятичной отметки.


NUMERIC(М,D) [ZEROFILL]

Синоним для типа DECIMAL.


DATE

Дата. Поддерживаемый диапазон: от 1000-01-01 до 9999-12-31. MySQL отображает значения DATE в формате (YY) YY-MM-DD, но позволяет вам назначать значения столбцам DATE, используя строки или числа.


DATETIME

Комбинация даты и времени. Поддерживаемый диапазон: от 1000-01-01 00:00:00 до 9999-12-31 23:59:59. MySQL отображает значения типа DATETIME в формате (YY) YY-MM-DD НН:ММ: SS, но позволяет вам назначать значения столбцам DATETIME, используя строки или числа.


TIMESTAMP[(М)]

Метка времени. Поддерживаемый диапазон: от 1970-01-01 00:00:00 примерно до 2037. MySQL отображает значения типа TIMESTAMP в форматах (YY) YY-MM-DD HH:MM:SS, YY-MM-DD НН:ММ:SS, (YY)YY-MM-DD или YY-MM-DD, в зависимости от значения М: 14 (или пропущено), 12, 8 или б, но позволяет вам задавать значения столбцам TIMESTAMP, используя строки или числа.

Столбец TIMESTAMP полезен для записи даты и времени операции INSERT или UPDATE, потому что он будет автоматически установлен для даты и времени самой последней операции, если вы не зададите значение самостоятельно. Вы можете также устанавливать его к текущей дате и времени, назначая значе¬ние NULL.

Тип TIMESTAMP всегда сохраняется в 4 байтах. Параметр М воздействует только на то, как отображается столбец TIMESTAMP. Обратите внимание, что столбцы TIMESTAMP (X) при X, равном 8 или 14, являются числами, в то время как другие столбцы TIMESTAMP (X) представляют собой строки!


TIME

Время. Поддерживаемый диапазон: от -838:59:59 до 838:59:59. MySQL отображает значения типа TIME в формате HH:MM:SS, но позволяет вам задавать значения столбцам TIME, используя строки или числа.


YEAR[(2|4)]

Год с двумя или четырьмя цифрами (по умолчанию задано 4). Допустимые значения: от 1901 до 2155, 0000 в формате года с 4 цифрами и 1970-2069, если вы используете формат с 2 цифрами (70-69). MySQL отображают значения YEAR в формате YYYY, но позволяет вам указывать значения столбцам типа YEAR, используя строки или числа. Впервые тип YEAR появился в MySQL версии 3.22.


[NATIONAL] CHAR(М) [BINARY]

Строка фиксированной длины, которая всегда дополняется справа пробелами до определенной длины. Диапазон М от 1 до 255 символов. Хвостовые пробелы будут удалены, когда значение извлекается из таблицы. Переменные типа CHAR сортируются и сравниваются без учета регистра согласно заданному по умолчанию набору символов, если не задано ключевое слово BINARY. Параметр NATIONAL CHAR (короткая форма NCHAR) представляет собой взятый из ANSI SQL способ определить, что столбец CHAR должен использовать заданный набор символов CHARACTER. Это значение принято по умолчанию в MySQL.

CHAR является сокращением для CHARACTER. MySQL позволяет вам создавать столбец типа CHAR(0). Это главным образом полезно, когда вы должны обеспечить совместимость с некоторыми старыми прикладными программами, которые зависят от существования столбца, но фактически не используют его значение. Это также очень уцобно, когда вы нуждаетесь в столбце, который может принимать только 2 значения: CHAR(0), который не определен как NOT NULL, займет всего лишь один бит и может принимать только 2 значения: NULL или «» (пустая строка).


[NATIONAL] VARCHAR(М) [BINARY]

Строка переменной длины (также известна как “резиновая строка").

Конечные пробелы будут автоматически удалены, когда значение сохранено (это отличается от спецификаций ANSI SQL). Диапазон М от 1 до 255 символов. Значения типа VARCHAR сортируются и сравниваются без учета регистра, согласно заданному по умолчанию набору символов, если не задано ключевое слово BINARY. Тип VARCHAR является сокращением для CHARACTER VARYING.


TINYBLOB и TINYTEXT

Столбцы типов TINYBLOB или TINYTEXT имеют максимальную длину в 255 (2∧8-1) символов.


BLOB и TEXT

Столбцы BLOB или TEXT имеют максимальную длину в 65535 (2∧16-1) символов.


MEDIUMBLOB и MEDIUMTEXT

Столбцы MEDIUMBLOB или MEDIUMTEXT имеют максимальную длину в 16777215 (2∧24-1) символов.


LONGBLOB и LONGTEXT

Столбцы LONGBLOB или LONGTEXT имеют максимальную длину в 4294967295 (2∧32-1) символов. Обратите внимание, что поскольку протокол клиент-сервер имеет в настоящее время ограничение в 16 мегабайт на пакет связи, вы не можете использовать весь диапазон этого типа.


ENUM("valuel",'value2',...)

Перечисление. Строковый объект, который может иметь только одно значение, выбранное из списка значений valuel, value2, ..., NULL или специальное значение ошибки «». ENUM может иметь максимум 65535 разных значений.


SET("valuel",'value2',...)

Множество. Строковый объект, который может иметь ноль или больше значений, каждое из которых должно быть выбрано из списка значений valuel, value2, .... SET, может включать максимум 64 члена.