SELECT
и WHERE
CREATE
, DROP
, ALTER
Buy this Reference Manual in softcover from Barnes & Noble!
MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных. В данном разделе вначале дается обзор всех возможных типов и приводятся требования по хранению для каждого типа столбца, затем свойства типов описываются более подробно по каждой категории. Мы намеренно сделали обзор кратким, поскольку более детальные описания требуют дополнительной информации о конкретных типах столбцов, например, о допустимых форматах представления величин.
Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях используются следующие обозначения:
M
D
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]
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
.BLOB
и TEXT
ENUM
SET
Posted by on Friday November 15 2002, @1:25am | [Delete] [Edit] |
Notice:
The documentation says that negative values are
disallowed in FLOAT columns that are marked
UNSIGNED but this is not the case. Moreover, INT
UNSIGNED Columns are set to zero when a negative
value is provided.
Verify your data type before insertion/update.
Add your own comment.