13.1.1 Синтаксис числовых типов данных
Для целочисленных типов данных M указывает минимальную ширину отображения. Максимальная ширина отображения составляет 255. Ширина отображения не связана с диапазоном значений, которые может хранить тип, как описано в разделе 13.1.6 «Атрибуты числовых типов».
Для чисел с плавающей запятой и чисел с фиксированной запятой M — это общее количество цифр, которые могут быть сохранены.
Атрибут ширины отображения устарел для целочисленных типов данных; ожидается, что поддержка будет удалена в будущих версиях MySQL.
Если вы зададите ZEROFILL для числового столбца, MySQL автоматически добавляет атрибут UNSIGNED к столбцу.
Атрибут ZEROFILL устарел для числовых типов данных; ожидается, что поддержка будет удалена в будущих версиях MySQL. Рассмотрите использование альтернативных способов достижения эффекта этого атрибута. Например, приложения могут использовать функцию LPAD() для заполнения чисел нулями до желаемой ширины или хранить отформатированные числа в столбцах CHAR.
Числовые типы данных, допускающие атрибут UNSIGNED, также допускают SIGNED. Однако эти типы данных по умолчанию имеют знак, поэтому атрибут SIGNED не оказывает никакого влияния.
Атрибут UNSIGNED устарел для столбцов типа FLOAT, DOUBLE и DECIMAL (и любые их синонимы); ожидается, что поддержка будет удалена в будущих версиях MySQL. Рассмотрите использование простого ограничения CHECK вместо этого для таких столбцов.
SERIAL является псевдонимом для BIGINT
UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
SERIAL DEFAULT VALUE в определении целочисленного столбца является псевдонимом для NOT NULL AUTO_INCREMENT
UNIQUE.
При использовании вычитания между целочисленными значениями, где одно имеет тип UNSIGNED, результат является беззнаковым, если не включен режим SQL NO_UNSIGNED_SUBTRACTION. См. раздел 14.10 «Функции и операторы приведения типов».
-
Тип значения бита.
Mуказывает количество битов на значение, от 1 до 64. По умолчанию значение равно 1, еслиMопущено. -
TINYINT[(M)] [UNSIGNED] [ZEROFILL]Очень малое целое число. Диапазон со знаком от
-128до127. Диапазон без знака от0до255. -
Эти типы являются синонимами для
TINYINT(1). Значение ноль считается ложным. Отличное от нуля значение считается истинным:mysql>
SELECT IF(0, 'true', 'false');+------------------------+ | IF(0, 'true', 'false') | +------------------------+ | false | +------------------------+ mysql>SELECT IF(1, 'true', 'false');+------------------------+ | IF(1, 'true', 'false') | +------------------------+ | true | +------------------------+ mysql>SELECT IF(2, 'true', 'false');+------------------------+ | IF(2, 'true', 'false') | +------------------------+ | true | +------------------------+Однако значения
TRUEиFALSE— это просто псевдонимы для1и0соответственно, как показано здесь:mysql>
SELECT IF(0 = FALSE, 'true', 'false');+--------------------------------+ | IF(0 = FALSE, 'true', 'false') | +--------------------------------+ | true | +--------------------------------+ mysql>SELECT IF(1 = TRUE, 'true', 'false');+-------------------------------+ | IF(1 = TRUE, 'true', 'false') | +-------------------------------+ | true | +-------------------------------+ mysql>SELECT IF(2 = TRUE, 'true', 'false');+-------------------------------+ | IF(2 = TRUE, 'true', 'false') | +-------------------------------+ | false | +-------------------------------+ mysql>SELECT IF(2 = FALSE, 'true', 'false');+--------------------------------+ | IF(2 = FALSE, 'true', 'false') | +--------------------------------+ | false | +--------------------------------+Последние два утверждения отображают результаты, поскольку
2не равно ни1, ни0. -
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.SERIALявляется псевдонимом дляBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.Некоторые моменты, которые следует учитывать в отношении столбцов типа
BIGINT:-
Все арифметические операции выполняются с использованием знаковых
BIGINTилиDOUBLEзначений, поэтому не следует использовать целые числа без знака больше, чем9223372036854775807(63 бита), за исключением использования функций битовых операций! В противном случае некоторые из последних цифр в результате могут быть неверными из-за ошибок округления при преобразовании значения типаBIGINTв типDOUBLE.MySQL может обрабатывать
BIGINTв следующих случаях:При использовании целых чисел для хранения больших значений без знака в столбце типа
BIGINT.В функциях
MIN(илиcol_name)MAX(, гдеcol_name)col_nameотносится к столбцу типаBIGINT.При использовании операторов (
+,-,*и т. д.), где оба операнда — целые числа.
Вы всегда можете сохранить точное целое значение в столбце типа
BIGINT, сохранив его в виде строки. В этом случае MySQL выполняет преобразование строки в число, не используя промежуточное представление с двойной точностью.Операторы
-,+и*используют арифметику типаBIGINT, когда оба операнда — целые значения. Это означает, что при умножении двух больших целых чисел (или результатов функций, возвращающих целые числа) вы можете получить неожиданные результаты, если результат больше9223372036854775807.
-
-
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]Упакованное «точное» число с фиксированной точкой.
M— это общее количество цифр (точность), аD— количество цифр после десятичной точки (разрядность). Десятичная точка и (для отрицательных чисел) знак не учитываются вM. ЕслиDравно 0, значения не имеют десятичной точки или дробной части. Максимальное количество цифр (M) дляDECIMALсоставляет 65. Максимальное количество поддерживаемых десятичных знаков (D) — 30. ЕслиDопущено, по умолчанию оно равно 0. ЕслиMопущено, по умолчанию оно равно 10. (Также существует ограничение на длину текста литераловDECIMAL; см. Раздел 14.24.3, «Обработка выражений».)UNSIGNED, если указано, запрещает отрицательные значения. АтрибутUNSIGNEDустарел для столбцов типаDECIMAL(и любых синонимов); ожидается, что его поддержка будет удалена в будущих версиях MySQL. Вместо этого для таких столбцов рекомендуется использовать простое ограничениеCHECK.Все базовые вычисления (
+, -, *, /) со столбцамиDECIMALвыполняются с точностью 65 цифр. -
DEC[(,M[,D])] [UNSIGNED] [ZEROFILL]NUMERIC[(,M[,D])] [UNSIGNED] [ZEROFILL]FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]Эти типы являются синонимами для
DECIMAL. СинонимFIXEDдоступен для совместимости с другими системами баз данных.
-
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]Малое (однобайтовое) число с плавающей запятой. Допустимые значения — от
-3.402823466E+38до-1.175494351E-38,0и от1.175494351E-38до3.402823466E+38. Это теоретические пределы, основанные на стандарте IEEE. Фактический диапазон может быть немного меньше в зависимости от вашего оборудования или операционной системы.M— общее количество цифр, аD— количество цифр после запятой. ЕслиMиDопущены, значения хранятся в пределах, разрешённых оборудованием. Число с плавающей запятой одинарной точности имеет точность примерно 7 десятичных знаков.FLOAT(— нестандартное расширение MySQL. Этот синтаксис устарел, и ожидается, что поддержка будет удалена в будущих версиях MySQL.M,D)UNSIGNED, если указано, запрещает отрицательные значения. АтрибутUNSIGNEDустарел для столбцов типаFLOAT(и любых синонимов), и ожидается, что поддержка будет удалена в будущих версиях MySQL. Для таких столбцов рассмотрите использование простого ограниченияCHECK.Использование
FLOATможет привести к неожиданным проблемам, так как все вычисления в MySQL выполняются с двойной точностью. См. Раздел B.3.4.7, «Решение проблем с отсутствием совпадений строк». -
FLOAT(p) [UNSIGNED] [ZEROFILL]Число с плавающей запятой.
pпредставляет точность в битах, но MySQL использует это значение только для определения, использоватьFLOATилиDOUBLEдля результирующего типа данных. Еслиpот 0 до 24, тип данных становитсяFLOATбезMилиDзначений. Еслиpот 25 до 53, тип данных становитсяDOUBLEбезMилиDзначений. Диапазон результирующего столбца такой же, как для однобайтовогоFLOATили двойногоDOUBLEтипов данных, описанных ранее в этом разделе.UNSIGNED, если указано, запрещает отрицательные значения. АтрибутUNSIGNEDустарел для столбцов типаFLOAT(и любых синонимов), и ожидается, что поддержка будет удалена в будущих версиях MySQL. Для таких столбцов рассмотрите использование простого ограниченияCHECK.Синтаксис
FLOAT(предоставлен для совместимости с ODBC.p) -
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]Число с плавающей запятой нормального размера (двойной точности). Допустимые значения — от
-1.7976931348623157E+308до-2.2250738585072014E-308,0и от2.2250738585072014E-308до1.7976931348623157E+308. Это теоретические пределы, основанные на стандарте IEEE. Фактический диапазон может быть немного меньше в зависимости от вашего оборудования или операционной системы.M— общее количество цифр, аD— количество цифр после запятой. ЕслиMиDопущены, значения хранятся в пределах, разрешённых оборудованием. Число с плавающей запятой двойной точности имеет точность примерно 15 десятичных знаков.DOUBLE(— нестандартное расширение MySQL; устарело. Ожидается, что поддержка этого синтаксиса будет удалена в будущих версиях MySQL.M,D)UNSIGNED, если указано, запрещает отрицательные значения. АтрибутUNSIGNEDустарел для столбцов типаDOUBLE(и любых синонимов), и ожидается, что поддержка будет удалена в будущих версиях MySQL. Для таких столбцов рассмотрите использование простого ограниченияCHECK. -
DOUBLE PRECISION[(,M,D)] [UNSIGNED] [ZEROFILL]REAL[(M,D)] [UNSIGNED] [ZEROFILL]Эти типы являются синонимами для
DOUBLE. Исключение: если включен SQL-режимREAL_AS_FLOAT,REALявляется синонимом дляFLOAT, а не дляDOUBLE.
© 2025 Oracle
Licensed under the GPLv2 License.