2010-10-29 26 views
20

Ho sempre pensato che il numero tra parentesi rappresentasse la lunghezza del campo? Tuttavia, capisco che non è sempre il caso. Forse è un problema mysql? Qualcuno mi ha detto che se avessi impostato un campo lungo 9 caratteri, posso aggiungere un valore con più di 9 caratteri, ma solo i primi 9 verranno salvati.Che cosa significa in realtà il numero tra parentesi?

Esempio ...

create table "person" (id INT, age INT(2)); 

Se questo è il caso, non dovrei selezionare qualcosa come TINYINT anziché INT per l'età?

risposta

35

INT(2) genererà un INT con il minimum display width of 2:

MySQL supporta un'estensione per specificare facoltativamente la larghezza di visualizzazione di tipi di dati interi in parentesi che segue la parola chiave base per il tipo. Ad esempio, INT (4) specifica un INT con una larghezza di visualizzazione di quattro cifre. Questa larghezza di visualizzazione facoltativa può essere utilizzata dalle applicazioni per visualizzare valori interi con larghezza inferiore alla larghezza specificata per la colonna, inserendoli a sinistra con spazi. (Vale a dire, questa larghezza è presente nei metadati restituiti con i set di risultati.)

La larghezza di visualizzazione non vincola l'intervallo di valori che possono essere memorizzati nella colonna . Né impedisce che i valori più ampi della larghezza del display della colonna vengano visualizzati correttamente. Ad esempio, una colonna specificata come SMALLINT (3) presenta il solito intervallo SMALLINT da -32768 a 32767 e i valori al di fuori dell'intervallo consentito da tre cifre vengono visualizzati per intero utilizzando più di tre cifre.

questo non non pregiudica l'intervallo di possibili valori che possono essere memorizzati nel campo; né è il numero di byte utilizzati per memorizzarlo. Sembra essere solo una raccomandazione per le applicazioni su come mostrare il valore, a meno che non venga utilizzato ZEROFILL (vedere la pagina collegata).

Uno senza risposta TINYINT (0 ... 255) probabilmente farebbe altrettanto, a meno che lo compia un grande passo avanti durante la vita della vostra applicazione.

+0

E continua: "La larghezza del display non vincola l'intervallo di valori che possono essere memorizzati nella colonna, né impedisce che i valori più ampi della larghezza di visualizzazione della colonna vengano visualizzati correttamente." –

+1

quindi perché preoccuparsi di implicare che il campo può assumere un valore fino a 2? Non penso che abbia qualcosa da fare w/la lunghezza del valore per interno di mysql, corretto? È solo una cosa da esposizione. – luckytaxi

+0

@Anders, si tratta di un problema mysql o si applica a postgres, oracle e altri? – luckytaxi

-3

Questo è il caso per i tipi di campo come vchar, ma per i numeri rappresenta il numero di byte che utilizza per rappresentare il numero. Un numero intero di due byte significa che puoi contenere un numero 2^16 - 1 (8 bit in un byte, quindi 16 totali). Se è un'età, immagino che dovresti essere al sicuro con due byte. ;)

+3

Pensavo che '(2)' fosse anche per byte, ma non è corretto. –

+0

ah ok, quindi è più per vchar. Quindi, se volessi visualizzare SSN, non avrei dovuto fare 'ssn INT (9)' – luckytaxi

+0

Apparentemente mi sono sbagliato. Ascolta Pekka. ò.ò – Neil

Problemi correlati