Spec-Zone.ru › MySQL 5.7

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 «Функции и операторы приведения типов».

  • BIT[(M)]

    Тип битового значения. M указывает количество бит на значение, от 1 до 64. По умолчанию значение равно 1, если M опущено.

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]

    Очень маленькое целое число. Диапазон со знаком от -128 до 127. Диапазон без знака от 0 до 255.

  • BOOL, BOOLEAN

    Эти типы являются синонимами для 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(M,D) — нестандартное расширение MySQL.

    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(p) предоставляется для совместимости с ODBC.

  • 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(M,D) — нестандартное расширение MySQL.

    UNSIGNED, если указано, запрещает отрицательные значения.

  • 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/numeric-type-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API