MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных. В данном разделе вначале дается обзор всех возможных типов и приводятся требования по хранению для каждого типа столбца, затем свойства типов описываются более подробно по каждой категории. Мы намеренно сделали обзор кратким, поскольку более детальные описания требуют дополнительной информации о конкретных типах столбцов, например, о допустимых форматах представления величин.
Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях используются следующие обозначения:
M
Указывает максимальный размер вывода. Максимально допустимый размер вывода составляет 255 символов.
D
Употребляется для типов данных с
плавающей точкой и указывает
количество разрядов, следующих за
десятичной точкой. Максимально
возможная величина составляет 30
разрядов, но не может быть больше,
чем M-2.
Квадратные скобки
(‘[’ и
‘]’) указывают для
типа данных группы необязательных
признаков.
Заметьте, что если для столбца
указать параметр ZEROFILL, то
MySQL будет автоматически добавлять в
этот столбец атрибут
UNSIGNED.
Предупреждение:
следует помнить, что при выполнении
вычитания между числовыми
величинами, одна из которых
относится к типу UNSIGNED,
результат будет беззнаковым! See
Раздел 6.3.5, «Функции приведения типов».
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Очень малое целое число. Диапазон
со знаком от -128 до
127. Диапазон без знака
от 0 до 255.
BIT, BOOL
Являются синонимами для
TINYINT(1).
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Малое целое число. Диапазон со
знаком от -32768 до
32767. Диапазон без знака
от 0 до 65535.
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Целое число среднего размера.
Диапазон со знаком от
-8388608 до 8388607.
Диапазон без знака от 0
до 16777215.
INT[(M)] [UNSIGNED] [ZEROFILL]
Целое число нормального размера.
Диапазон со знаком от
-2147483648 до
2147483647. Диапазон без
знака от 0 до
4294967295.
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Синоним для INT.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Большое целое число. Диапазон со
знаком от -9223372036854775808 до
9223372036854775807. Диапазон
без знака от 0 до
18446744073709551615. Для
столбцов типа BIGINT
необходимо учитывать некоторые
особенности:
Все арифметические операции
выполняются с использованием
значений BIGINT или
DOUBLE со знаком, так
что не следует использовать
беззнаковые целые числа
больше чем
9223372036854775807 (63 бита),
кроме операций, выполняемых
логическими функциями. В
противном случае несколько
последних разрядов результата
могут оказаться ошибочными
из-за ошибок округления при
преобразовании BIGINT
в DOUBLE. MySQL 4.0 может
обрабатывать данные типа
BIGINT в следующих
случаях:
Использование целых чисел
для хранения больших
беззнаковых величин в
столбце с типом
BIGINT.
В случаях
MIN(big_int_column) и
MAX(big_int_column).
При использовании
операторов
(‘+’,
‘-’,
‘*’ и т.д.),
когда оба операнда являются
целыми числами.
Точное значение целого числа
всегда можно хранить в столбце
с типом BIGINT в виде
строки. В этом случае MySQL
выполнит преобразование
строки в число без
промежуточного
преобразования.
Если оба аргумента являются
целочисленными величинами, то
при выполнении над ними
операций ‘-’,
‘+’, и
‘*’ будут
использоваться правила
BIGINT-арифметики. Это
означает, что при умножении
двух больших целых чисел (или
результатов вычислений
функций, возвращающих целые
числа) результат операции
может оказаться
непредсказуемым, если он
превосходит значение
9223372036854775807.
FLOAT(точность) [UNSIGNED]
[ZEROFILL]
Число с плавающей точкой. Атрибут
точности может иметь значение
<=24 для числа с
плавающей точкой обычной
(одинарной) точности и между
25 и 53 - для
числа с плавающей точкой
удвоенной точности. Эти типы
данных сходны с типами
FLOAT и DOUBLE,
описанными ниже. FLOAT(X)
относится к тому же интервалу, что
и соответствующие типы
FLOAT и DOUBLE, но
диапазон значений и количество
десятичных знаков не определены.
В версии MySQL 3.23 это истинная
величина числа с плавающей
точкой. В более ранних версиях MySQL
тип данных FLOAT(точность)
всегда имеет два десятичных
знака.
Следует отметить, что
использование типа данных
FLOAT может привести к
неожиданным проблемам, так как
все вычисления в MySQL выполняются с
удвоенной точностью. See
Раздел A.5.6, «Решение проблем с отсутствием строк, удовлетворяющих условиям поиска». Данный
синтаксис обеспечивает
совместимость с ODBC.
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
Малое число с плавающей точкой
обычной точности. Допустимые
значения: от -3,402823466E+38
до -1,175494351E-38,
0, и от
1,175494351E-38 до
3,402823466E+38. Если указан
атрибут UNSIGNED,
отрицательные значения
недопустимы. Атрибут M
указывает количество выводимых
пользователю знаков, а атрибут
D - количество разрядов,
следующих за десятичной точкой.
Обозначение FLOAT без
указания аргументов или запись
вида FLOAT(X), где
X <=24
справедливы для числа с плавающей
точкой обычной точности.
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
Число с плавающей точкой
удвоенной точности нормального
размера. Допустимые значения: от
-1,7976931348623157E+308 до
-2,2250738585072014E-308,
0, и от
2,2250738585072014E-308 до
1,7976931348623157E+308. Если
указан атрибут UNSIGNED,
отрицательные значения
недопустимы. Атрибут M
указывает количество выводимых
пользователю знаков, а атрибут
D - количество разрядов,
следующих за десятичной точкой.
Обозначение DOUBLE без
указания аргументов или запись
вида FLOAT(X), где 25 <=
X <= 53 справедливы для числа
с плавающей точкой двойной
точности.
DOUBLE PRECISION[(M,D)] [UNSIGNED]
[ZEROFILL], REAL[(M,D)] [UNSIGNED]
[ZEROFILL]
Данные обозначения являются
синонимами для DOUBLE.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
``Неупакованное'' число с
плавающей точкой. Ведет себя
подобно столбцу CHAR,
содержащему цифровое значение.
Термин ``неупакованное'' означает,
что число хранится в виде строки и
при этом для каждого десятичного
знака используется один символ.
Разделительный знак десятичных
разрядов, а также знак
‘-’ для
отрицательных чисел не
учитываются в M (но
место для них зарезервировано).
Если атрибут D равен
0, величины будут
представлены без десятичного
знака, т.е. без дробной части.
Максимальный интервал значений
типа DECIMAL тот же, что и
для типа DOUBLE, но
действительный интервал для
конкретного столбца
DECIMAL может быть
ограничен выбором значений
атрибутов M и
D. Если указан атрибут
UNSIGNED, отрицательные
значения недопустимы. Если
атрибут D не указан, его
значение по умолчанию равно
0. Если не указан
M, его значение по
умолчанию равно 10. В
более ранних, чем MySQL 3.23, версиях
аргумент M должен
содержать в себе место для знака
числа и десятичного знака.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL],
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
Данные обозначения являются
синонимами для DECIMAL.
DATE
Дата. Поддерживается интервал от
'1000-01-01' до
'9999-12-31'. MySQL выводит
значения DATE в формате
'YYYY-MM-DD', но можно
установить значения в столбец
DATE, используя как
строки, так и числа. See
Раздел 6.2.2.2, «Типы данных DATETIME, DATE и TIMESTAMP».
DATETIME
Комбинация даты и времени.
Поддерживается интервал от
'1000-01-01 00:00:00' до
'9999-12-31 23:59:59'. MySQL выводит
значения DATETIME в формате
'YYYY-MM-DD HH:MM:SS', но можно
устанавливать значения в столбце
DATETIME, используя как
строки, так и числа. See
Раздел 6.2.2.2, «Типы данных DATETIME, DATE и TIMESTAMP».
TIMESTAMP[(M)]
Временная метка. Интервал от
'1970-01-01 00:00:00' до
некоторого значения времени в 2037
году. MySQL выводит значения
TIMESTAMP в форматах
YYYYMMD
