Come sappiamo, un database è uno strumento per l’archiviazione di informazioni all’interno di una struttura definita. Anche MySQL, ovviamente, rispetta questa definizione e per farlo offre supporto a differenti tipi di dato i quali definiscono con precisione ogni "scomparto" di ciascun database.
Più precisamente ogni database e composto da tabelle che, a loro volta, sono composte da colonne le quali, appunto, sono gli "scomparti" al cui interno sono ospitati i dati. Ad ogni colonna è associato un solo tipo di dato, questo significa, ad esempio, che una colonna definita numerica non potrà ospitare dati di tipo stringa.
Possiamo dire, quindi, che la tipologia di dati assegnata ad ogni colonna la definisce e la limita, nel senso che la colonna potrà validamente accettare solo dati corrispondenti al tipo assegnatole.
Facciamo un esempio: la colonna "nome" della tabella "amici" creata nella passata lezione è di tipo VARCHAR(20): questo significa che la colonna ammette solo caratteri alfanumerici ed ha una lunghezza massima di 20.
Diversi tipi di dato supportati da MySQL
Volendo fare una prima macroscopica distinzione tra i diversi tipi di dato supportati da MySQL, possiamo suddividerli in quattro famiglie:
- dati numerici
- dati stringa
- date e orari
- dati geometrici (scarsamente utilizzati nell’uso comune)
Tipi di dato numerici in MySQL
MySQL offre un’ampia scelta per i campi numerici: identificare correttamente il tipo di valore consente di ottimizzare le prestazioni del MySQL e di risparmiare spazio prezioso.
Di seguito alcune tabelle riepilogative circa le scelte possibili per un campo numerico:
Tipi Numerici Interi
Tipo | Intervallo di valori | Solo se positivi (UNSIGNED) |
---|---|---|
TINYINT | da -128 a +127 | da 0 a 255 |
SMALLINT | da -32768 a +32767 | da 0 a 65535 |
MEDIUMINT | da -8388608 a +8388608 | da 0 a 16777215 |
INT | da -2147483648 a +2147483647 | da 0 a 4294967295 |
BIGINT | da -9223372036854775808 a +9223372036854775807 | da 0 a 18446744073709550615 |
E’ importante precisare che se all’interno di un campo di tipo numerico si cerca di inserire un valore maggiore di quanto ammesso dal tipo prescelto, MySQL salverà il valore massimo ammesso per quel campo.
Volendo fare un esempio ammettiamo di avere un campo TINYINT (UNSIGNED ovvero privo di segno) e di volerci salvare un valore numerico pari a 5754: essendo questo numero superiore alla capacità del campo cosa succederà? Semplicemente MySQL salverà al suo interno il valore di 255, cioè "riempirà" il campo esaurendo la sua massima capacità.
Tipi Numerici NON Interi
Tipo |
---|
FLOAT(I,D) |
DOUBLE(I,D) |
DECIMAL(I,D) |
Da precisare che FLOAT, DOUBLE e DECIMAL funzionano alla stessa maniera (varia unicamente la capacità, ovvero il range di valori ammessi: FLOAT garantisce precisione fino a circa 7 cifre dopo la virgola, DOUBLE fino a 15 circa). Come si vede dalla tabella questi tre tipi di dati prevedono un doppio valore tra parentesi: la I indica il numero complessivo di cifre ammesse, la D il numero di Decimali.
Se ad es. passiamo il numero 12.345678 ad una colonna di tipo FLOAT(6,4), tale numero diverrà 12.3456 (inquanto si accettano solo 6 cifre di cui 4 decimali).
I modificatori per i campi numerici
Per concludere questa lezione sui tipi di dati numerici dobbiamo menzionare i cd. modificatori. Si tratta di un istruzione ulteriore che viene passata al DBMS in fase di creazione (o modifica) di una tabella.
I modificatori per i campi numerici sono:
- AUTO_INCREMENT – Aumenta automaticamente il valore di una colonna aggiungendo 1 al valore massimo già registrato nella tabella. E’ opportuno utilizzarlo in combinazione con NOT NULL. Può essere applicato a tutti i tipi numerici interi.
- UNSIGNED – un campo contrassegnato con UNSIGNED non accetta valori negativi
- ZEROFILL – viene utilizzato per inserire un numero preceduto da una quantità variabile di zeri in base all’ampiezza della colonna. Se per esempio si dichiara un campo INT(10) ZEROFILL e si desidera memorizzare il valore "1234", esso verrà salvato come "0000001234"