2011-11-08 13 views
35

Jestem przy założeniu, że INT (1) jest dokładnie tym samym co TINYINT (1), ale naprawdę nie mam pojęcia. Ilekroć mam wartości, które mogą być tylko jedną liczbą całkowitą (np. Wartość 0-9), zawsze użyłem INT (1), aby powiedzieć, że jest liczbą całkowitą i będzie to tylko jeden znak, który zakładam, że to może to być tylko wartość od 0 do 9 (proszę wyjaśnij mi to, jeśli się mylę). Zawsze ignorowałem inne typy INT, w których można odrzucić liczbę jako. Nie jestem doświadczonym użytkownikiem MySQL i staram się unikać bardziej skomplikowanych rzeczy, które możesz z nim zrobić.Czy istnieje różnica w używaniu INT (1) kontra TINYINT (1) w MySQL?

Moje pytanie brzmi: czy istnieje różnica między różnymi typami liczb całkowitych INT, TINYINT, SMALLINT, MEDIUMINT i BIGINT, jeśli zdefiniowano długość 1 dla każdego typu? Jeśli nie, czy powinienem ich używać w każdym razie (widzę, że używam ich dla bardziej semantycznego znaczenia, TINYINT jest bardziej konkretny niż tylko INT)? Jeśli tak, czy mogę łatwo (i/lub powinienem) po prostu przejść przez moją bazę danych i zmienić wszystkie moje pola INT (1) na TINYINT (1)?

+0

Wierzę, że "TINYINT (1)" jest 1-bitową, a nie 1-cyfrową liczbą całkowitą. Nie wiem o "INT (1)", ale jeśli poprawnie zapisuje numery od 0 do 9, nadal go używaj :) Ale zawsze myślałem, że to też 1 bit. – Ryan

+0

@minitech 'TINYINT' jest 1-bajtowy, nie 1-bitowy – Phil

+0

@Phil: Oops: P Więc zmienię komentarz na:" Oboje są jednym bajtem. " – Ryan

Odpowiedz

35

Liczba w nawiasach dla typów kolumn całkowitych to "szerokość wyświetlania". Nie ma to wpływu na wymagania dotyczące pamięci, ponieważ są one wcześniej zdefiniowane.

Dalsze czytanie

+3

Więc nawet jeśli zdefiniuję INT (1), aby zezwolić na tylko jeden znak, to nadal będzie używać 4 bajty bez względu na wszystko? – animuson

+1

@animuson 'INT (1)' does ** not ** allow only one character. Ustawia szerokość wyświetlania dla tej kolumny w zestawach wyników. Przeczytaj ostatni link powyżej, wyjaśnia to całkiem dobrze. – Phil

+1

Och, widzę. Sądzę, że powinienem był kontynuować na poprzednim łączu 2. o.o Czy też zaszkodziłoby cokolwiek, gdybym tylko zmienił pole z INT na TINYINT, gdyby wszystkie wartości były równe 0s i 1s, czy powinienem zostawić je w spokoju? – animuson

41

tutaj zrozumiesz to w lepszy sposób!

tinyint: 1 byte, -128 to +127/0 to 255 (unsigned) 
smallint: 2 bytes, -32,768 to +32,767/0 to 65,535 (unsigned) 
mediumint: 3 bytes, -8,388,608 to 8,388,607/0 to 16,777,215 (unsigned) 
int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647/0 to 4,294,967,295 (unsigned) 
bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807/0 to 18,446,744,073,709,551,615 (unsigned) 
+3

Dziękuję, to jest bardzo przydatne! – Braunson

+2

To powinna być wybrana odpowiedź :)! – Hussard

+0

, jeśli używasz phpmyadmin, po najechaniu kursorem na menu rozwijane wybierz typ i automatycznie wyświetli wszystkie te szczegóły. :) –

Powiązane problemy