Spec-Zone.ru › MySQL 9.2

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

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

  • BOOLEAN, BOOL

    Эти типы являются синонимами для INTEGER. Значение нуль считается ложным. ненулевые значения считаются истинными:

    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

    Малое целое число. Диапазон со знаком от -32768 до 32767. Беззнаковый диапазон от 0 до 65535.

  • MEDIUMINT

    Целое число среднего размера. Диапазон со знаком от -8388608 до 8388607. Беззнаковый диапазон от 0 до 16777215.

  • INT

    Целое число обычного размера. Диапазон со знаком от -2147483648 до 2147483647. Беззнаковый диапазон от 0 до 4294967295.

  • INTEGER

    Этот тип является синонимом для INT.

  • BIGINT

    Большое целое число. Диапазон со знаком от -9223372036854775808 до 9223372036854775807. Беззнаковый диапазон от 0 до 18446744073709551615.

    SERIAL является псевдонимом для BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

    Необходимо учитывать некоторые моменты, касающиеся столбцов типа BIGINT:

    • Все арифметические операции выполняются с использованием знаковых BIGINT или DOUBLE значений, поэтому следует избегать использования беззнаковых больших целых чисел, превышающих 9223372036854775807 (63 бита), за исключением использования битовых функций! В противном случае некоторые из последних цифр в результате могут быть неверными из-за ошибок округления при преобразовании значения типа BIGINT в значение типа DOUBLE.

      MySQL может обрабатывать BIGINT в следующих случаях:

      • При использовании целых чисел для хранения больших беззнаковых значений в столбце типа BIGINT.

      • В функциях MIN или MAX, где col_name относится к столбцу типа BIGINT.

      • При использовании операторов (+, -, * и т.д.), когда оба операнда являются целыми числами.

    • Вы всегда можете сохранить точное целое значение в столбце типа BIGINT, сохранив его в виде строки. В этом случае MySQL выполняет преобразование строки в число, которое не включает промежуточного представления двойной точности.

    • Операторы -, + и * используют целочисленную арифметику, когда оба операнда являются целыми значениями. Это означает, что если вы умножаете два больших целых числа (или результаты от функций, возвращающих целые числа), вы можете получить неожиданные результаты, если результат больше 9223372036854775807.

  • DECIMAL

    Упакованное «точное» число с фиксированной точкой. M — это общее количество цифр (точность), а D — количество цифр после десятичной точки (масштаб). Десятичная точка и (для отрицательных чисел) знак не учитываются в M. Если D равно 0, значения не имеют десятичной точки или дробной части. Максимальное количество цифр (M) для DECIMAL составляет 65. Максимальное количество поддерживаемых десятичных знаков (D) — 30. Если D опущено, значение по умолчанию — 0. Если M опущено, значение по умолчанию — 10. (Существует также ограничение на длину текста литералов DECIMAL; см. раздел 14.25.3 «Обработка выражений».)

    UNSIGNED, если указано, запрещает отрицательные значения. Атрибут UNSIGNED устарел для столбцов типа DECIMAL (и любых синонимов); ожидается, что поддержка его будет удалена в будущих версиях MySQL. Вместо этого для таких столбцов следует использовать простое ограничение CHECK.

    Все основные вычисления (+, -, *, /) со столбцами DECIMAL выполняются с точностью 65 цифр.

  • NUMERIC, DEC, FIXED

    Эти типы являются синонимами для DECIMAL. Синоним NUMERIC доступен для совместимости с другими системами баз данных.

  • 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-9.2-en/numeric-type-syntax.html

Spec-Zone.ru

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