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».