Что на самом деле означает число в скобках?

Я всегда думал, что число в скобках представляет поле длина? Однако, я понимаю, что это не всегда так. Может быть, это проблема mysql? Кто-то сказал мне, что если я установлю поле длиной 9 символов, я могу добавить значение, которое больше 9 символов, но будут сохранены только первые 9.

пример ...

create table "person" ( id INT, age INT(2));

Если это так, не должен ли я выбрать что-то вроде TINYINT вместо INT для возраста?

2 ответов


INT(2) будет генерировать INT с минимальная ширина дисплея 2:

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

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

это не влияет на диапазон возможных значений, которые могут быть сохранены в поле; ни это количество байтов, используемых для его хранения. Кажется, это только рекомендация для приложений, как показать значение, если ZEROFILL используется (см. соответствующую страницу).

беззнаковый TINYINT (0...255), вероятно, сделал бы то же самое, если бы криоконсервация делает большой шаг вперед в течение жизни вашего приложения.


Это относится к типам полей, таким как vchar, но для чисел он представляет количество байтов, которые он использует для представления числа. Целое число из двух байтов означает, что вы можете провести ряд 2^16 - 1 (8 бит в байте, так всего 16). Если это возраст, я думаю, вы должны быть в безопасности с двумя байтами. ;)