11.1.1 Синтаксис числовых типов данных
Для целочисленных типов данных, M указывает минимальную ширину отображения. Максимальная ширина отображения составляет 255. Ширина отображения не связана с диапазоном значений, которые может хранить тип, как описано в разделе 11.1.6 «Атрибуты числовых типов».
Для типов данных с плавающей запятой и фиксированной запятой, M — это общее количество цифр, которые могут быть сохранены.
Если вы укажете ZEROFILL для числового столбца, MySQL автоматически добавит атрибут UNSIGNED к столбцу.
Числовые типы данных, которые допускают атрибут UNSIGNED, также допускают SIGNED. Однако, эти типы данных по умолчанию со знаком, поэтому атрибут SIGNED не имеет эффекта.
SERIAL является псевдонимом для BIGINT
UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
SERIAL DEFAULT VALUE в определении целочисленного столбца является псевдонимом для NOT NULL AUTO_INCREMENT
UNIQUE.
При использовании вычитания между целочисленными значениями, где одно имеет тип UNSIGNED, результат является беззнаковым, если не включен SQL-режим NO_UNSIGNED_SUBTRACTION. См. раздел 12.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; см. Раздел 12.21.3, «Обработка выражений».)UNSIGNED, если указано, запрещает отрицательные значения.Все основные вычисления (
+, -, *, /) со столбцами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.M,D)UNSIGNED, если указано, запрещает отрицательные значения.Использование
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, описанных ранее в этом разделе.Синтаксис
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.M,D)UNSIGNED, если указано, запрещает отрицательные значения. -
DOUBLE PRECISION[(,M,D)] [UNSIGNED] [ZEROFILL]REAL[(M,D)] [UNSIGNED] [ZEROFILL]Эти типы являются синонимами для
DOUBLE. Исключение: если включен режим SQLREAL_AS_FLOAT, тоREALявляется синонимом дляFLOAT, а не дляDOUBLE.
© 2025 Oracle
Licensed under the GPLv2 License.