MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных. В данном разделе вначале дается обзор всех возможных типов и приводятся требования по хранению для каждого типа столбца, затем свойства типов описываются более подробно по каждой категории. Мы намеренно сделали обзор кратким, поскольку более детальные описания требуют дополнительной информации о конкретных типах столбцов, например, о допустимых форматах представления величин.
Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях используются следующие обозначения:
M
Указывает максимальный размер вывода. Максимально допустимый размер вывода составляет 255 символов.
D
Употребляется для типов данных с плавающей точкой и указывает количество разрядов, следующих за десятичной точкой. Максимально возможная величина составляет 30 разрядов, но не может быть больше, чем M -2.
Квадратные скобки ('[' и ']') указывают для типа данных группы необязательных признаков.
Заметьте, что если для столбца указать параметр ZEROFILL , то MySQL будет автоматически добавлять в этот столбец атрибут UNSIGNED .
Предупреждение: следует помнить, что при выполнении вычитания между числовыми величинами, одна из которых относится к типу UNSIGNED , результат будет беззнаковым! См. раздел Функции приведения типов.
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 выполняются с удвоенной точностью. См. раздел Решение проблем с отсутствием строк, удовлетворяющих условиям поиска. Данный синтаксис обеспечивает совместимость с 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 , используя как строки, так и числа. См. раздел Типы данных 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 , используя как строки, так и числа. См. раздел Типы данных 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 полезен для записи даты и времени при выполнении oпераций INSERT или UPDATE , так как при этом автоматически вносятся значения даты и времени самой последней операции, если эти величины не введены программой. Можно также устанавливать текущее значение даты и времени, задавая значение NULL . См. раздел Типы данных даты и времени . Аргумент M влияет только на способ вывода столбца TIMESTAMP ; для хранения его значений всегда используется 4 байта. Следует учитывать, что столбцы TIMESTAMP(M) , где M равно 8 или 14 , представляют собой числа, в то время, как столбцы TIMESTAMP(M) с иным значением аргумента M являются строками. Это убеждает, что можно надежно сделать дамп и восстановить таблицу с этими типами столбцов! См. раздел Типы данных DATETIME , DATE и TIMESTAMP .
TIME
Время. Интервал от '-838:59:59' до '838:59:59' . MySQL выводит значения TIME в формате 'HH:MM:SS' , но можно устанавливать значения в столбце TIME , используя как строки, так и числа. См. раздел Тип данных TIME .
YEAR[(2|4)]
Год в двухзначном или четырехзначном форматах (по умолчанию формат четырехзначный). Допустимы следующие значения: с 1901 по 2155 , 0000 для четырехзначного формата года и 1970-2069 при использовании двухзначного формата (70-69 ). MySQL выводит значения YEAR в формате YYYY , но можно задавать значения в столбце YEAR , используя как строки, так и числа (тип данных YEAR недоступен в версиях, предшествующих MySQL 3.22). См. раздел Тип данных 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 или "" ). См. раздел Типы данных CHAR и VARCHAR.
CHAR
Это синоним для CHAR(1) .
[NATIONAL] VARCHAR(M) [BINARY]
Строка переменной длины. Примечание: концевые пробелы удаляются при сохранении значения (в этом заключается отличие от спецификации ANSI SQL). Диапазон аргумента M составляет от 0 до 255 символов (от 1 до 255 в версиях, предшествующих MySQL Version 4.0.2). Если не задан атрибут чувствительности к регистру BINARY , то величины VARCHAR сортируются и сравниваются как независимые от регистра. См. раздел Молчаливые изменения определений столбцов. Термин VARCHAR является сокращением от CHARACTER VARYING . См. раздел Типы данных CHAR и VARCHAR.
TINYBLOB
TINYTEXT
Столбец типа BLOB или TEXT с максимальной длиной 255 (2^8 - 1 ) символов. См. раздел Молчаливые изменения определений столбцов. См. раздел Типы данных BLOB и TEXT .
BLOB
TEXT
Столбец типа BLOB или TEXT с максимальной длиной 65535 (2^16 - 1 ) символов. См. раздел Молчаливые изменения определений столбцов. См. раздел Типы данных BLOB и TEXT .
MEDIUMBLOB
MEDIUMTEXT
Столбец типа BLOB или TEXT с максимальной длиной 16777215 (2^24 - 1 ) символов. См. раздел Молчаливые изменения определений столбцов. См. раздел Типы данных BLOB и TEXT .
LONGBLOB
LONGTEXT
Столбец типа BLOB или TEXT с максимальной длиной 4294967295 (2^32 - 1 ) символов. См. раздел Молчаливые изменения определений столбцов. Следует учитывать, что в настоящее время протокол передачи данных сервер/клиент и таблицы MyISAM имеют ограничение 16 Мб на передаваемый пакет/строку таблицы, поэтому пока нельзя использовать этот тип данных в его полном диапазоне. См. раздел Типы данных BLOB и TEXT .
ENUM('значение1','значение2',...)
Перечисление. Перечисляемый тип данных. Объект строки может иметь только одно значение, выбранное из заданного списка величин 'значение1' , 'значение2' , ... , NULL или специальная величина ошибки "" . Список ENUM может содержать максимум 65535 различных величин. См. раздел Тип перечисления ENUM .
SET('значение1','значение2',...)
Набор. Объект строки может иметь ноль или более значений, каждое из которых должно быть выбрано из заданного списка величин 'значение1' , 'значение2' , ... Список SET может содержать максимум 64 элемента. См. раздел Тип множества SET .
1 2 3 4 5
8 8 8
| |