Мне было интересно , что разница между BigInt
, MediumInt
и Int
которые ... казалось бы , очевидно , что они позволили бы для больших чисел; Тем не менее, я могу сделать Int(20)
или или, BigInt(20)
и это может показаться, что это не обязательно о размере.
Некоторое понимание было бы потрясающим, просто любопытным. Некоторое время я использовал MySQL и пытался использовать бизнес-потребности при выборе типов, но я никогда не понимал этот аспект.
bar INT ZEROFILL(20)
. Это было бы намного яснее. Но это решение было принято давным-давно, и его изменение сейчас сломало бы миллионы установок баз данных.Число в скобках в объявлении типа - это ширина экрана , которая не связана с диапазоном значений, которые можно сохранить в типе данных. То, что вы можете объявить
Int(20)
, не означает, что вы можете хранить в нем значения до 10 ^ 20:Список максимальных и минимальных значений, которые могут быть сохранены в каждом типе данных MySQL, см. Здесь .
источник
Цитата :
источник
Насколько я знаю, есть только одна небольшая разница, когда вы пытаетесь вставить значение, которое находится за пределами диапазона.
INT(20)
для системы это означает выделить в памяти минимум 20 бит. Но если вы вставите значение больше чем2^20
, оно будет успешно сохранено, только если оно меньшеINT(32) -> 2147483647
(или2 * INT(32) -> 4294967295
дляUNSIGNED
)Пример:
BIGINT(20)
для системы это означает выделить в памяти минимум 20 бит. Но если вы вставите значение больше чем2^20
, оно будет успешно сохранено, если оно меньшеBIGINT(64) -> 9223372036854775807
(или2 * BIGINT(64) -> 18446744073709551615
дляUNSIGNED
)Пример:
источник
Я хотел бы добавить еще одно замечание: если вы храните действительно большое число, например 902054990011312, тогда легко увидеть разницу
INT(20)
иBIGINT(20)
. Желательно хранить вBIGINT
.источник
Давайте приведем пример для int (10), один с ключевым словом zerofill, другой нет, таблица нравится так:
Давайте вставим некоторые данные:
затем
Мы это видим
с ключевым словом
zerofill
, число меньше 10 заполнит 0, но безzerofill
него не будетВо-вторых, с ключевым словом
zerofill
int_10_with_zf становится типом int без знака, если вы вставите минус, вы получите ошибкуOut of range value for column.....
. Но вы можете вставить минус в int_10. Также, если вы вставите 4294967291 в int_10, вы получите ошибкуOut of range value for column.....
Вывод:
int (X) без ключевого слова
zerofill
, равно int range -2147483648 ~ 2147483647int (X) с ключевым словом
zerofill
, поле равно unsigned int range 0 ~ 4294967295, если длина num меньше X, он заполнит 0 слеваисточник