2011-07-30 16 views
8

Im nowe do programowania baz danych i mam bardzo podstawowe pytanie:MySQL typ danych w bazie

w moim PHPMyAdmin GUI że Im używając do tworzenia tabel w mojej bazy danych, co to znaczy, gdy w kolumnie „Typ” (tj datatype) ma typ danych i coś w nawiasach po tym. Na przykład: int (20), bigint (30) .....

Rozumiem, że typ int i bigint oznaczają liczbę użytych bajtów, a tym samym zakres wartości, które można zapisać. Ale co oznacza wartość w nawiasie?

Co robi (20) i (30) oznaczają .... co to ma wpływ na ....

przepraszam, jeśli Q jest podstawowe, próbuję zrozumieć baz .. ..

dziękuję

Odpowiedz

12

Zasadniczo jest to Wyświetlacz Szerokość.

Znalazłem bardzo dobre wytłumaczenie tej koncepcji here is, więc zdecydowałem, że nie opiszę tego sam i pozwolę ci ją przeczytać z oryginalnego źródła.

W ten sam sposób, że max długości może być określony dla typów danych String (np VARCHAR (5) = maksymalnie 5 znaków), numeryczne komórki typu danych może mieć „Display Długość” określony (np INT (5)).

Istnieje powszechne nieporozumienie, że określenie długości wyświetlania w kolumnie INT ograniczy zakres tej kolumny. Jako przykład, dość często uważa się, że zdefiniowanie kolumny jako INT (1) spowoduje zmniejszenie niepodpisanego zakresu kolumny do 0 - 9, a to spowoduje zmniejszenie niepodpisanego zakresu kolumny do 0 - 99. Nie o to chodzi. Kolumna danych ZAWSZE będzie mieć żywotnie niepodpisany zakres 0 - 4294967295 lub podpisany zakres od -2147483648 do 2147483647, niezależnie od podanej szerokości wyświetlania, niezależnie od tego, czy będzie to 1 (INT (1)) lub 20 (INT (20)).

  1. Szerokość wyświetlania nie zmienia wymagań dotyczących pamięci dla typu danych.
  2. Szerokość wyświetlania nie zmienia rzeczywistych danych w żaden sposób (tzn .: przechowuje całą wartość dla danych)
  3. Kolumna zwraca pełną wartość, gdy zostanie wywołana w zapytaniu, niezależnie od szerokości wyświetlania (książka bezpośrednio zaprzecza to roszczenie to sprawia, że ​​jak widać powyżej)
+0

Dzięki za Twój szczegółowy odpowiedzi sll. Doceniam to. – banditKing

+0

@ user657514 'INT (x)'/'BIGINT (x)' jest * inny * w porównaniu do 'VARCHAR (x)'/'CHAR (x)' lub 'NUMERIC (x, y)'. W pierwszym miejscu jest to tylko "szerokość wyświetlacza". Te ostatnie przypadki faktycznie narzucają limit. Jest to rozwiązane w całej odpowiedzi, ale jest to mylące "widzieć". –

+0

@ Well znaleźć ten link ... nie tak dobrze. Zgodnie z artykułem 'VARCHAR (55)' nie może przechowywać ciągu znaków o zerowej długości! Moje przekonanie o dokładności w źródle jest zmniejszone. :( –

0

wartość w nawiasie jest rozmiar lub długość pola. [Edytuj uderzenie] Jeśli ustawione na 2, pole uint może przyjmować wartości od 0 do 99. [/ strike] Możesz ustawić tę wartość na własną rękę, a tym samym zapisać trochę pamięci, jeśli spodziewasz się, że twoje wartości nie przekroczą tego ograniczenia. Przydatne w związku z varchar.

Oto inny wątek o rozmiarach varchar: What are the optimum varchar sizes for MySQL?

+0

jesteś pewien, że int (2) ogranicza zakres wartości, które mogą gościć int kolumny 0-99 – sll

+0

hmm. więc jeśli mam INT jako mój typ danych, to zakres obsługiwanych wartości to: -2147483648 do 2147483647. Ale jeśli przewiduję, że nie użyję tego całego zakresu, mogę ustawić wartość w nawiasach takich jak to: INT (4) i czy będzie to oznaczać, że górny zasięg zostanie zredukowany do 3647? Proszę podać rzeczywisty przykład, proszę wyjaśnić. Dzięki – banditKing

+1

Nie, przepraszam. Dotyczy to tylko znaków. Zobacz odpowiedź sll! –

Powiązane problemy