Spec-Zone.ru › MySQL 9.2

13.1.6 Атрибуты числовых типов

MySQL поддерживает расширение, позволяющее необязательно указывать ширину отображения целочисленных типов данных в скобках после базового ключевого слова для типа. Например, INT(4) задаёт INT с шириной отображения четыре цифры. Эта необязательная ширина отображения может использоваться приложениями для отображения целочисленных значений, имеющих ширину меньше указанной для столбца, с помощью левого заполнения пробелами. (То есть, эта ширина присутствует в метаданных, возвращаемых с наборами результатов. Использование зависит от приложения.)

Ширина отображения не ограничивает диапазон значений, которые могут быть сохранены в столбце. Она также не препятствует правильному отображению значений, шире, чем ширина отображения столбца. Например, столбец, заданный как SMALLINT(3), имеет обычный SMALLINT диапазон от -32768 до 32767, и значения, выходящие за пределы диапазона, разрешенного тремя цифрами, отображаются полностью, используя более трех цифр.

При использовании вместе с необязательным (нестандартным) ZEROFILL атрибутом, стандартное заполнение пробелами заменяется на нули. Например, для столбца, объявленного как INT(4) ZEROFILL, значение 5 извлекается как 0005.

Примечание

Атрибут ZEROFILL игнорируется для столбцов, участвующих в выражениях или UNION запросах.

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

Атрибут ZEROFILL устарел для числовых типов данных, как и атрибут ширины отображения для целочисленных типов данных. Ожидается, что поддержка ZEROFILL и ширины отображения для целочисленных типов данных будет удалена в будущей версии MySQL. Рассмотрите альтернативные способы получения эффекта этих атрибутов. Например, приложения могут использовать функцию LPAD() для заполнения чисел нулями до желаемой ширины или сохранять отформатированные числа в CHAR столбцах.

Все целочисленные типы могут иметь необязательный (нестандартный) UNSIGNED атрибут. Беззнаковый тип может использоваться для разрешения только неотрицательных чисел в столбце или когда вам нужен более широкий верхний числовой диапазон для столбца. Например, если столбец INT является UNSIGNED, размер диапазона столбца остается таким же, но его конечные точки смещаются вверх от -2147483648 и 2147483647 до 0 и 4294967295.

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

Если вы укажете ZEROFILL для числового столбца, MySQL автоматически добавит атрибут UNSIGNED.

Целочисленные или типы с плавающей запятой могут иметь атрибут AUTO_INCREMENT. При вставке значения NULL в индексированный AUTO_INCREMENT столбец, столбец устанавливается на следующее значение последовательности. Обычно это value+1, где value — это наибольшее значение для столбца в настоящее время в таблице. (AUTO_INCREMENT последовательности начинаются с 1.)

Хранение 0 в AUTO_INCREMENT столбце имеет тот же эффект, что и хранение NULL, если не включен режим SQL NO_AUTO_VALUE_ON_ZERO.

Вставка NULL для генерации AUTO_INCREMENT значений требует, чтобы столбец был объявлен NOT NULL. Если столбец объявлен NULL, вставка NULL сохраняет NULL. При вставке любого другого значения в AUTO_INCREMENT столбец, столбец устанавливается на это значение, и последовательность сбрасывается так, чтобы следующее автоматически сгенерированное значение следовал последовательно от вставленного значения.

Отрицательные значения для столбцов AUTO_INCREMENT не поддерживаются.

CHECK ограничения не могут ссылаться на столбцы, имеющие атрибут AUTO_INCREMENT, а также нельзя добавить атрибут AUTO_INCREMENT к существующим столбцам, используемым в CHECK ограничениях.

AUTO_INCREMENT устарел для столбцов FLOAT и DOUBLE; вы должны ожидать, что его поддержка будет удалена в будущей версии MySQL. Рассмотрите удаление атрибута AUTO_INCREMENT из таких столбцов, чтобы избежать потенциальных проблем совместимости, или преобразуйте их в целочисленный тип.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/numeric-type-attributes.html

Spec-Zone.ru

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