2009-10-27 13 views
5

Jeśli użyję INT (12) vs INT (10) lub INT (8), co to właściwie zrobi, jeśli chodzi o mnie w kodzie?Jaka jest różnica (w przypadku zastosowania do mojego kodu) między INT (10) a INT (12)?

(To jest spin off z previous question) Przeczytałem podręczniki i myślę, że rozumiem, co mówią, ale tak naprawdę nie wiem, w jaki sposób będzie to miało zastosowanie do mojego kodowania php/mysql.

Czy ktoś może podać przykład tego, gdzie miałoby to znaczenie?

Odpowiedz

6

Krótka odpowiedź: nie ma różnicy.

Szerokość wyświetlania jest przekazywana w "danych meta". Od aplikacji zależy, czy z niej skorzystamy. Zwykle jest to po prostu ignorowane. Nie sądzę, że możesz go uzyskać za pomocą funkcji mysql, ale możesz być w stanie z mysqli używając mysqli_fetch_field_direct.

+0

Co powinienem dodać, dodając BIGINT(), nic nie jest opcją, prawda? Wybierz losową liczbę? 42? – Citizen

+0

Nie potrzebujesz nawet nawiasów; możesz po prostu powiedzieć "BIGINT". –

+2

Jeden darmowy Internet dla ciebie, sir! – Citizen

4

Nie powinno się niczego zmieniać, ponieważ nie ma wpływu na dane zwrócone. Informacje mogą być używane przez aplikacje, które chcą z niego korzystać.

Patrz http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

jedno rozszerzenie jest obsługiwany przez MySQL do ewentualnego określenia szerokości wyświetlacza Integer typów danych w nawiasach po hasła bazowej dla danego typu (na przykład, INT (4)). Ta opcjonalna szerokość wyświetlania może być używana przez aplikacje do wyświetlania wartości całkowitych o szerokości mniejszej niż szerokość określona dla kolumny przez wypełnianie ich spacjami po lewej stronie. (Oznacza to, że szerokość ta jest obecna w metadanych wrócił z zestawów wyników. czy jest on stosowany lub nie jest do aplikacji.)

Szerokość wyświetlacz nie ogranicza zakres wartości, które mogą być przechowywane w kolumnie, a także liczba cyfr wyświetlanych dla wartości o szerokości przekraczającej tę określoną dla kolumny. Na przykład kolumna określona jako SMALLINT (3) ma zwykły zakres SMALLINT od -32768 do 32767, a wartości spoza zakresu dozwolonego przez trzy znaki są wyświetlane za pomocą więcej niż trzech znaków.

(kopalni Nacisk)

16

Argument typów całkowitych MySQL nie ma wpływu na ich przechowywania lub zakresu wartości obsługiwane przez każdy typ danych.

argument odnosi się tylko do wyświetlania szerokości, które mogą być używane przez aplikacje, jak wspomina Jonathan Fingland. także jest to, gdy używany w połączeniu z opcją ZEROFILL:

CREATE TABLE foo (
    i INT(3) ZEROFILL, 
    j INT(6) ZEROFILL, 
    k INT(11) ZEROFILL 
); 
INSERT INTO foo (i, j, k) VALUES (123, 456, 789); 
SELECT * FROM foo; 

+------+--------+-------------+ 
| i | j  | k   | 
+------+--------+-------------+ 
| 123 | 000456 | 00000000789 | 
+------+--------+-------------+ 

Zobacz jak ZEROFILL pilnuje danych jest zero-wyściełane przynajmniej liczby cyfr równą liczbę całkowitą typu argumentu.

Bez danych ZEROFILL dane są wypełniane spacjami, ale ponieważ spacje są często usuwane, trudniej jest zauważyć tę różnicę.

Jaki wpływ ma to na twój kod PHP? Żaden. Jeśli potrzebujesz wyprowadzać dane kolumnowe, wartości spacji lub zerowych padów, to bardziej elastyczne jest użycie sprintf(),

Powiązane problemy