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