Jaki jest rozmiar kolumny int(11)
w mysql w bajtach?
A maksymalna wartość, którą można przechowywać w tych kolumnach?
mysql
przed moim przybyciem. Thx
Jaki jest rozmiar kolumny int(11)
w mysql w bajtach?
A maksymalna wartość, którą można przechowywać w tych kolumnach?
mysql
przed moim przybyciem. Thx
Odpowiedzi:
INT
Będzie zawsze 4 bajty bez względu na to jaka długość jest określona.
TINYINT
= 1 bajt (8 bitów)SMALLINT
= 2 bajty (16 bitów)MEDIUMINT
= 3 bajty (24 bity)INT
= 4 bajty (32 bity)BIGINT
= 8 bajtów (64 bity).Długość określa tylko liczbę znaków, które należy wpisać podczas wybierania danych za pomocą klienta wiersza poleceń mysql. 12345 zapisany jako int(3)
nadal będzie wyświetlać się jako 12345, ale jeśli był zapisany tak int(10)
, nadal wyświetlałby się jako 12345, ale miałbyś opcję wpisania pierwszych pięciu cyfr. Na przykład, jeśli dodasz ZEROFILL
, wyświetli się jako 0000012345.
... a maksymalna wartość to 2147483647 (podpisany) lub 4294967295 (niepodpisany)
5001
wyświetli się tak, 5001
jakby pole było zdefiniowane jako INT(3)
. Zobacz odpowiedź @priyabagus poniżej i tutaj .
INT ( x ) zrobi różnicę tylko pod względem wyświetlania , to znaczy, aby wyświetlać liczbę w cyfrach x , a nie ogranicza się do 11. Sparujesz ją za pomocą ZEROFILL
, która wstawi zera, aż dopasuje się do twojej długości.
Tak więc, dla dowolnej liczby x wINT(x)
jeśli przechowywana wartość ma mniej cyfr niż x , ZEROFILL
wstawi zera.
INT (5) ZEROFILL z zapamiętaną wartością 32 pokaże 00032
INT (5) z zapamiętaną wartością 32 pokaże 32
INT z zapamiętaną wartością 32 pokaże 32
jeśli przechowywana wartość ma więcej cyfr niż x , zostanie pokazana bez zmian.
INT (3) ZEROFILL z zapamiętaną wartością 250000 pokaże 250000
INT (3) z zapamiętaną wartością 250000 pokaże 250000
INT z zapamiętaną wartością 250000 pokaże 250000
Nie ma to wpływu na rzeczywistą wartość przechowywaną w bazie danych, rozmiar jest nadal taki sam, a wszelkie obliczenia będą zachowywać się normalnie.
Dotyczy to również BIGINT, MEDIUMINT, SMALLINT i TINYINT.
ZEROFILL
.
Zgodnie z tym , int(11)
zajmie 4 bajty miejsca, czyli 32 bity miejsca o 2^(31) = 2147483648
maksymalnej wartości i -2147483648
minimalnej wartości. Jeden bit jest na znak.
Jak powiedzieli inni, minimalne / maksymalne wartości, które kolumna może przechowywać, oraz ilość miejsca w bajtach jest określana tylko przez typ, a nie przez długość.
Wiele z tych odpowiedzi mówi, że (11)
część wpływa tylko na szerokość wyświetlania, co nie jest do końca prawdą, ale głównie.
Definicja int(2)
bez podanego zerowania będzie:
100
100
kiedy wyjście (nie 0
lub 00
)Jedyne, co (2)
zrobi, to jeśli podany zostanie również zerofill :
1
zostaną przedstawione 01
.Najlepszym sposobem, aby zobaczyć wszystkie niuanse, jest uruchomienie:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
który wyświetli:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Ta odpowiedź jest testowana pod kątem MySQL 5.7.12 dla Linuksa i może, ale nie musi różnić się w przypadku innych implementacji.
Jaki jest rozmiar kolumny int (11) w mysql w bajtach?
(11)
- ten atrybut int
typu danych nie ma nic wspólnego z rozmiarem kolumny. Jest to tylko szerokość wyświetlania typu danych liczb całkowitych. Od 11.1.4.5. Atrybuty typu numerycznego :
MySQL obsługuje rozszerzenie opcjonalnego określania szerokości wyświetlania liczb całkowitych typów danych w nawiasach następujących po słowie kluczowym typu dla tego typu. Na przykład INT (4) określa INT o szerokości wyświetlania czterech cyfr.
Dobre wyjaśnienie tego można znaleźć tutaj
Podsumowując: Liczba N w int (N) jest często mylona z maksymalnym dopuszczalnym rozmiarem kolumny, jak ma to miejsce w przypadku varchar (N).
Ale nie jest tak w przypadku typów danych Integer liczba N w nawiasach nie jest maksymalnym rozmiarem kolumny, ale po prostu parametrem informującym MySQL, jaką szerokość ma wyświetlać kolumna, gdy dane tabeli są przeglądane przez MySQL konsola (gdy używasz atrybutu ZEROFILL).
Liczba w nawiasach powie MySQL, ile zer ma uzupełniać przychodzące liczby całkowite. Na przykład: Jeśli używasz ZEROFILL w kolumnie, która jest ustawiona na INT (5) i wstawiona jest liczba 78, MySQL wstawi tę wartość zerami, dopóki liczba nie wypełni liczby w nawiasach. tzn. 78 zmieni się na 00078, a 127 na 00127. Podsumowując: Liczba w nawiasach służy do wyświetlania.
W pewnym sensie liczba w nawiasach jest bezużyteczna, chyba że używasz atrybutu ZEROFILL.
Tak więc rozmiar int pozostałby taki sam, tj. -2147483648 do 2147483648 dla podpisanych i 0 do 4294967295 dla niepodpisanych(~ 2,15 miliarda i 4,2 miliarda, co jest jednym z powodów, dla których programiści nie są świadomi historii stojącej za liczbą N w nawiasach, ponieważ prawie nie wpływa ona na bazę danych, chyba że zawiera ona ponad 2 miliardy wierszy) i pod względem bajtów będzie 4 bajty .
Aby uzyskać więcej informacji na temat rozmiaru / zakresu typów liczb całkowitych, patrz MySQL Manual
Chociaż ta odpowiedź jest mało prawdopodobna, myślę, że warto podać następujące wyjaśnienie:
BIT SZCZEGÓŁOWY,
którego szerokość ma najwyraźniej na celu dostarczenie metadanych o tym, ile zer ma być wyświetlanych w postaci liczby wypełnionej zerami.
W rzeczywistości NIE ogranicza długości liczby zwracanej z zapytania, jeśli liczba ta przekracza określoną szerokość wyświetlania.
Aby dowiedzieć się, jaka długość / szerokość jest faktycznie dozwolona dla typu danych liczb całkowitych w MySQL, zobacz listę i link: ( typy: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
W związku z powyższym można oczekiwać, że szerokość wyświetlania nie będzie miała wpływu na wyniki standardowego zapytania, chyba że kolumny są określone jako kolumny ZEROFILL
LUB
w przypadku, gdy dane są pobierane do aplikacji i ta aplikacja zbiera szerokość wyświetlacza do użycia dla innego rodzaju wypełnienia.
Podstawowy numer referencyjny: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
, więc ... tak, to byk. Robi wszystko z zerofill.
W MySQL liczba całkowita int(11)
ma rozmiar 4 bajtów, co odpowiada 32 bitom.
Podpisana wartość to: - 2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
Niepodpisane wartości to: 0 to 2^32-1
= 0 to 4294967295
zgodnie z tą książką :
MySQL pozwala określić „szerokość” dla typów całkowitych, takich jak INT (11). Nie ma to większego znaczenia dla większości aplikacji: nie ogranicza legalnego zakresu wartości, ale po prostu określa liczbę znaków, które interaktywne narzędzia MySQL zarezerwują do celów wyświetlania. Dla celów przechowywania i obliczeń INT (1) jest identyczny z INT (20).