Spec-Zone.ru › MySQL 8.4

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

  • 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; см. Раздел 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(M,D) — нестандартное расширение MySQL. Этот синтаксис устарел, и ожидается, что поддержка будет удалена в будущих версиях MySQL.

    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(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; устарело. Ожидается, что поддержка этого синтаксиса будет удалена в будущих версиях MySQL.

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

Spec-Zone.ru

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