6.2 Типы данных столбцов
MySQL поддерживает несколько типов столбцов, которые можно разделить на
три категории: числовые типы данных, типы данных для хранения даты и
времени и символьные (строковые) типы данных. В данном разделе вначале
дается обзор всех возможных типов и приводятся требования по хранению для
каждого типа столбца, затем свойства типов описываются более подробно по
каждой категории. Мы намеренно сделали обзор кратким, поскольку более
детальные описания требуют дополнительной информации о конкретных типах
столбцов, например, о допустимых форматах представления величин.
Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях
используются следующие обозначения:
M
-
Указывает максимальный размер вывода. Максимально допустимый размер вывода
составляет 255 символов.
D
-
Употребляется для типов данных с плавающей точкой и указывает количество
разрядов, следующих за десятичной точкой. Максимально возможная величина
составляет 30 разрядов, но не может быть больше, чем
M
-2.
Квадратные скобки (`[' и `]') указывают для типа данных группы
необязательных признаков.
Заметьте, что если для столбца указать параметр ZEROFILL
, то MySQL будет
автоматически добавлять в этот столбец атрибут UNSIGNED
.
Предупреждение: следует помнить, что при выполнении вычитания между
числовыми величинами, одна из которых относится к типу UNSIGNED
, результат
будет беззнаковым! See section 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 section 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 section 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 section 6.2.2.2 Типы данных DATETIME
, DATE
и TIMESTAMP
.
TIMESTAMP[(M)]
-
Временная метка. Интервал от
'1970-01-01 00:00:00'
до некоторого
значения времени в 2037 году. MySQL выводит значения TIMESTAMP
в форматах
YYYYMMDDHHMMSS
, YYMMDDHHMMSS
, YYYYMMDD
или YYMMDD
в зависимости от
значений M
: 14
(или отсутствующее), 12
, 8
, или 6
; но можно также
устанавливать значения в столбце TIMESTAMP
, используя как строки, так и
числа. Столбец TIMESTAMP
полезен для записи даты и времени при выполнении
операций INSERT
или UPDATE
, так как при этом автоматически вносятся
значения даты и времени самой последней операции, если эти величины не
введены программой. Можно также устанавливать текущее значение даты и
времени, задавая значение NULL
. See section 6.2.2 Типы данных даты и времени.
Аргумент M
влияет только на способ вывода столбца TIMESTAMP
; для хранения
его значений всегда используется 4 байта. Следует учитывать, что столбцы
TIMESTAMP(M)
, где M
равно 8
или 14
, представляют собой числа, в то время,
как столбцы TIMESTAMP(M)
с иным значением аргумента M
являются строками.
Это убеждает, что можно надежно сделать дамп и восстановить таблицу с
этими типами столбцов! See section 6.2.2.2 Типы данных DATETIME
, DATE
и TIMESTAMP
.
TIME
-
Время. Интервал от
'-838:59:59'
до '838:59:59'
. MySQL выводит значения
TIME
в формате 'HH:MM:SS'
, но можно устанавливать значения в столбце TIME
,
используя как строки, так и числа. See section 6.2.2.3 Тип данных TIME
.
YEAR[(2|4)]
-
Год в двухзначном или четырехзначном форматах (по умолчанию формат
четырехзначный). Допустимы следующие значения: с
1901
по 2155
, 0000
для
четырехзначного формата года и 1970-2069
при использовании двухзначного
формата (70-69
). MySQL выводит значения YEAR
в формате YYYY
, но можно
задавать значения в столбце YEAR
, используя как строки, так и числа (тип
данных YEAR
недоступен в версиях, предшествующих MySQL 3.22).
See section 6.2.2.4 Тип данных YEAR
.
[NATIONAL] CHAR(M) [BINARY]
-
Строка фиксированной длины, при хранении всегда дополняется пробелами в
конце строки до заданного размера. Диапазон аргумента
M
составляет от 0
до
255
символов (от 1
до 255
в версиях, предшествующих MySQL 3.23). Концевые
пробелы удаляются при выводе значения. Если не задан атрибут
чувствительности к регистру BINARY
, то величины CHAR
сортируются и
сравниваются как независимые от регистра в соответствии с установленным по
умолчанию алфавитом.
Атрибут NATIONAL CHAR
(или его эквивалентная краткая
форма NCHAR
) представляет собой принятый в ANSI SQL способ указания, что
в столбце CHAR
должен использоваться установленный по умолчанию набор
символов (CHARACTER
). В MySQL это принято по умолчанию. CHAR
является
сокращением от CHARACTER
. MySQL позволяет создавать столбец типа CHAR(0)
.
В основном это полезно, если необходимо обеспечить совместимость с
некоторыми старыми приложениями, которые зависят от наличия столбца, но
реально эту величину не используют. Кроме того, такая возможность может
очень пригодиться в случае, если необходим столбец, который может
содержать только 2 значения, а именно CHAR(0)
(т.е. столбец, который не
определен как NOT NULL
, занимает только один бит и принимает только 2
значения: NULL
или ""
). See section 6.2.3.1 Типы данных CHAR и VARCHAR.
CHAR
-
Это синоним для
CHAR(1)
.
[NATIONAL] VARCHAR(M) [BINARY]
-
Строка переменной длины. Примечание: концевые пробелы удаляются при
сохранении значения (в этом заключается отличие от спецификации ANSI
SQL). Диапазон аргумента
M
составляет от 0
до 255
символов (от 1
до 255
в
версиях, предшествующих MySQL Version 4.0.2). Если не задан атрибут
чувствительности к регистру BINARY
, то величины VARCHAR
сортируются и
сравниваются как независимые от регистра. See section 6.5.3.1 Молчаливые изменения определений столбцов. Термин VARCHAR
является сокращением от CHARACTER
VARYING
. See section 6.2.3.1 Типы данных CHAR и VARCHAR.
TINYBLOB
-
TINYTEXT
-
Столбец типа
BLOB
или TEXT
с максимальной длиной 255
(2^8 - 1
) символов.
See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данных BLOB
и TEXT
.
BLOB
-
TEXT
-
Столбец типа
BLOB
или TEXT
с максимальной длиной 65535
(2^16 - 1
)
символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данных BLOB
и TEXT
.
MEDIUMBLOB
-
MEDIUMTEXT
-
Столбец типа
BLOB
или TEXT
с максимальной длиной 16777215
(2^24 - 1
)
символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данных BLOB
и TEXT
.
LONGBLOB
-
LONGTEXT
-
Столбец типа
BLOB
или TEXT
с максимальной длиной 4294967295
(2^32 - 1
)
символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. Следует
учитывать, что в настоящее время протокол передачи данных сервер/клиент и
таблицы MyISAM
имеют ограничение 16 Мб на передаваемый пакет/строку таблицы,
поэтому пока нельзя использовать этот тип данных в его полном диапазоне.
See section 6.2.3.2 Типы данных BLOB
и TEXT
.
ENUM('значение1','значение2',...)
-
Перечисление. Перечисляемый тип данных. Объект строки может иметь только
одно значение, выбранное из заданного списка величин
'значение1'
, 'значение2'
,
...
, NULL
или специальная величина ошибки ""
. Список ENUM
может содержать
максимум 65535
различных величин. See section 6.2.3.3 Тип перечисления ENUM
.
SET('значение1','значение2',...)
-
Набор. Объект строки может иметь ноль или более значений, каждое из
которых должно быть выбрано из заданного списка величин
'значение1'
,
'значение2'
, ...
Список SET
может содержать максимум 64 элемента.
See section 6.2.3.4 Тип множества SET
.
Главы
Add your own comment.