Zastanawiałem się, jaka jest różnica między BigInt
, MediumInt
i Int
są ... wydaje się oczywiste, że pozwalają one na większych liczbach; jednak mogę zrobić a Int(20)
lub a, BigInt(20)
a to wydawałoby się, że niekoniecznie chodzi o rozmiar.
Pewna wiedza byłaby niesamowita, po prostu ciekawa. Używam MySQL od jakiegoś czasu i staram się stosować potrzeby biznesowe przy wyborze typów, ale nigdy nie zrozumiałem tego aspektu.
bar INT ZEROFILL(20)
. Byłoby to o wiele bardziej jasne. Ale ta decyzja została podjęta dawno temu, a zmiana jej teraz złamałaby miliony instalacji baz danych.Liczba w nawiasach w deklaracji typu to szerokość wyświetlania , która nie jest związana z zakresem wartości, które mogą być przechowywane w typie danych. To, że możesz zadeklarować
Int(20)
, nie oznacza, że możesz przechowywać w nim wartości do 10 ^ 20:Aby uzyskać listę maksymalnych i minimalnych wartości, które mogą być przechowywane w każdym typie danych MySQL, zobacz tutaj .
źródło
Cytat :
źródło
O ile mi wiadomo, jest tylko jedna niewielka różnica, gdy próbujesz wstawić wartość spoza zakresu.
INT(20)
dla systemu, oznacza to przydzielenie w pamięci minimum 20 bitów. Ale jeśli wstawisz wartość większą niż2^20
, zostanie ona pomyślnie zapisana, tylko jeśli będzie mniejsza niżINT(32) -> 2147483647
(lub2 * INT(32) -> 4294967295
dlaUNSIGNED
)Przykład:
BIGINT(20)
dla systemu, oznacza to przydzielenie w pamięci minimum 20 bitów. Ale jeśli wstawisz wartość większą niż2^20
, zostanie ona pomyślnie zapisana, jeśli jest mniejsza niżBIGINT(64) -> 9223372036854775807
(lub2 * BIGINT(64) -> 18446744073709551615
dlaUNSIGNED
)Przykład:
źródło
Chciałem dodać jeszcze jedną kwestię: jeśli przechowujesz naprawdę dużą liczbę, taką jak 902054990011312, łatwo zauważyć różnicę
INT(20)
iBIGINT(20)
. Wskazane jest przechowywanie wBIGINT
.źródło
Podajmy przykład dla int (10) jeden ze słowem kluczowym zerofill, jeden nie, tabela lubi to:
Wstawmy trochę danych:
Następnie
Widzimy to
ze słowem kluczowym liczba
zerofill
mniejsza niż 10 wypełni 0, ale bezzerofill
niej niePo drugie, ze słowem kluczowym
zerofill
int_10_with_zf staje się typu int bez znaku, jeśli wstawisz minus, otrzymasz błądOut of range value for column.....
. Ale możesz wstawić minus do int_10. Również jeśli wstawisz 4294967291 do int_10, pojawi się błądOut of range value for column.....
Wniosek:
int (X) bez słowa kluczowego
zerofill
, jest równy int zakres -2147483648 ~ 2147483647int (X) ze słowem kluczowym
zerofill
, pole jest równe bez znaku int zakres 0 ~ 4294967295, jeśli długość num jest mniejsza niż X, wypełni 0 po lewejźródło