6.2 Типы данных столбцов
- 6.2.1 Числовые типы данных
- 6.2.2 Типы данных даты и времени
- 6.2.3 Символьные типы данных
- 6.2.4 Выбор правильного типа данных в столбце
- 6.2.5 Использование типов столбцов из других баз данных
- 6.2.6 Требования к памяти для различных типов столбцов
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. BITBOOL-
Являются синонимами для
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. TINYBLOBTINYTEXT-
Столбец типа
BLOBилиTEXTс максимальной длиной255(2^8 - 1) символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данныхBLOBиTEXT. BLOBTEXT-
Столбец типа
BLOBилиTEXTс максимальной длиной65535(2^16 - 1) символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данныхBLOBиTEXT. MEDIUMBLOBMEDIUMTEXT-
Столбец типа
BLOBилиTEXTс максимальной длиной16777215(2^24 - 1) символов. See section 6.5.3.1 Молчаливые изменения определений столбцов. See section 6.2.3.2 Типы данныхBLOBиTEXT. LONGBLOBLONGTEXT-
Столбец типа
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.
