MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQL6.2 Типы данных столбцов
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 .
Главы
|