• mysql-datatypes

    Tipi di dati in MySQL

    La modalità con la quale un DBMS come MySQL memorizza le informazioni e rappresenta internamente i dati riguarda i tipi di dati che il DBMS supporta.

    Ciascun DBMS supporta i propri tipi di dati, che sono diversi da DBMS a DBMS.

    Tipi di dati in MySQL

    MySQL supporta tre tipi fondamentali di dati:

    • i tipi numerici: sono utilizzati per rappresentare i valori numerici
    • i tipi di stringa: sono utilizzati per rappresentare del testo;
    • i tipi di data e ora: sono utilizzati per rappresentare date, orari e altri valori temporali.

    MySQL supporta anche altri tipi, come boolean, enumeration e set.

    Tipi numerici interi

    Ci sono diversi tipi numerici interi disponibili in MySQL di varie dimensioni. Tutti hanno un numero fisso di cifre, e non hanno parte frazionaria. Ciascun tipo di dato numerico intero viene memorizzato occupando un determinato spazio in termini di byte, e deve avere un valore minimo e uno massimo che dipende dal numero di byte che occupa e dal fatto che può avere un segno o meno.

    TipoByteValore minimo con segnoValore massimo con segnoValore minimo senza segnoValore massimo senza segno
    TINYINT1-1281270255
    SMALLINT2-3276832767065535
    MEDIUMINT3-83886088388608016777215
    INTEGER4-2147483648214748364704294967295
    BIGINT8-92233720368547758089223372036854775807018446744073709550615

    Quando viene creata una colonna di una tabella con un certo tipo di dato, è possibile specificare per i tipi di dati numerici interi le seguenti opzioni:

    • il numero minimo di cifre di visualizzazione del campo ( da non confondere con il numero di byte usato per memorizzare il campo, che rimane sempre lo stesso per ciascun tipo di dato);
    • se il valore ha un segno o meno;
    • se il valore occupa meno cifre del suo massimo previsto, il server può memorizzare il campo riempiendolo con degli zeri sulla sinistra o meno.

    La sintassi è la seguente:

    TINYINT[(M)] [UNSIGNED] [ZEROFILL]
    SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
    MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
    INT[(M)] [UNSIGNED] [ZEROFILL]
    BIGINT[(M)] [UNSIGNED] [ZEROFILL]

     

    e, ad esempio, con la creazione della seguente tabella vengono creati alcuni campi.

    Vengono inseriti alcuni dati.

    Vengono eseguita una query sulla tabella.

    Di seguito il risultato:

    mysql-tipi-numerici-interi

    Il valore numerico (10) specificato dopo il tipo di zerofill1 indica che il numero di cifre da mostrare quando viene lanciata la query è 10 e se il campo ha sono 5 cifre(il caso del primo record), la query lo mostra con 5 zeri sulla sinistra. Se il numero ha 3 cifre (il caso del secondo record), viene mostrato con 7 zeri sulla sinistra.

    Tipi numerici non interi

    I tipi numerici non interi sono quelli in virgola mobile (floating point), come float e double, e quelli “esatti” come decimal.

    Il tipo decimal ha una parte decimale fissa e viene utilizzato per rappresentare i valori di cui occorre avere una certa precisione (viene comunemente utilizzato per le applicazioni in ambito finanziario e altri settori in cui la precisione è più importante della possibilità di rappresentare valori molto grandi o molto piccoli).
    I tipi in virgola mobile (double e float) vengono utilizzati per rappresentare i numeri reali con una parte frazionaria che può essere molto grande o molto piccola. I numeri in virgola sacrificano la precisione a beneficio della scala: non sono rappresentazioni di valori del tutto accurate e vengono utilizzati nelle applicazioni in cui la precisione non è importante quanto la possibilità di rappresentare valori molto grandi o molto piccoli.

    Tipo
    DECIMAL(p,s)
    FLOAT(p,s)
    DOUBLE(p,s)

    La dichiarazione del tipo decimal accetta due parametri. Il primo parametro è la precisione che specifica il numero di cifre che verranno memorizzate e include le cifre dopo la virgola. Il secondo parametro è la scala, che specifica la posizione della virgola decimale (zero significa nessuna parte decimale). Ad esempio, la seguente dichiarazione indica 6 come precisione e 2 per scala, quindi ci sono sei cifre significative e la virgola decimale è in seconda posizione.

    DECIMAL (6,2)
    1234.56

     

    Il massimo di cifre consentite per il tipo decimal è 65 per p e 30 per s. L’occupazione di spazio di memorizzazione all’interno del database per il tipo decimal dipende dai parametri p e s specificati. I tipi di dati float e double invece occupano 4 byte e 8 byte rispettivamente.

     

    Tipi stringa

    Una buona parte dei tipi di dati fa parte dei tipi di dato stringa. In MySQL i tipi di dato stringa disponibili sono:

    • CHAR(n): stringa di lunghezza fissa tra 1 e 255 caratteri (esempio CHAR(5)), riempita a destra con spazi fino al raggiungimento della lunghezza specificata. La definizione della lunghezza non è obbligatoria e il valore predefinito è 1. L’occupazione di spazio di CHAR(n) è di n byte, indipendentemente dal contenuto del campo. Viene usato per campi di cui si conosce la lunghezza (ad esempio per campi di tipo Codice di Avviamento Postale o Codice Fiscale).
    • VARCHAR(n): stringa di lunghezza variabile tra 1 e 255 caratteri (esempio VARCHAR (25)). È necessario definire una lunghezza nella creazione di un campo VARCHAR. L’occupazione di spazio di VARCHAR(n) dipende dal contenuto del campo: al massimo può essere di n+1 byte, ma se un VARCHAR(100) contiene il valore ‘Database Master’, occuperà 16 byte (15 sono i caratteri della stringa più uno che deve essere aggiunto sempre per la lunghezza della stringa) e non 100.

    A CHAR e VARCHAR corrispondono i tipi BINARY e VARBINARY, che memorizzano stringhe di byte invece che di caratteri (non hanno character set). I valori BINARY vengono riempiti a destra con byte 0x00.

    I formati di tipo BLOB e TEXT sono utilizzati per memorizzare rispettivamente valori binari e di testo. La lunghezza massima per TINYBLOB e TINYTEXT è 255 caratteri, per BLOB e TEXT è di 65535 caratteri, per MEDIUMBLOB e MEDIUMTEXT è di 16.777.215 caratteri, per LONGBLOBLONGTEXT 4 gigabyte .

    Tipi data e ora

    MySQL fornisce i seguenti tipi di dato in grado di memorizzare data e ora:

    • DATE: memorizza una data nel formato YYYY-MM-DD (cioè anno di quattro cifre, mese di due cifre e giorni di due cifre). La data deve essere compresa tra ‘1000-01-01’ e ‘9999-12-31’.
    • DATETIME: memorizza la data e l’ora nel formato YYYY-MM-DD HH:MM:SS (anno di quattro cifre, mese di due cifre e giorni di due cifre, ore di due cifre, minuti di due cifre e secondi di due cifre). La data deve essere compresa tra ‘1000-01-01’ e ‘9999-12-31’.È  possibile memorizzare anche le frazioni di secondo fino al microsecondo (6 cifre); in questo caso il formato di memorizzazione è il seguente: YYYY-MM-DD HH:MM:SS[.frazione].
    • TIMESTAMP: simile a DATETIME, memorizza i valori corrispondenti al timestamp Unix, che vanno dalla mezzanotte del 1° gennaio 1970 a ‘2038-01-19 03:14:07.999999’. TIMESTAMP viene spesso usato per memorizzare automaticamente il momento dell’aggiornamento di una riga di tabella: con MySQL è possibile impostare in automatico una colonna TIMESTAMP di una tabella nel momento in cui viene effettuata un’operazione di tipo INSERT o UPDATE.
    • TIME: memorizza solamente un orario, e non la data. Il formato di memorizzazione è ‘HH:MM:SS’ (ore, minuti, secondi)..
    • YEAR(4): memorizza l’anno in quattro cifre. Può rappresentare valori che vanno dal 1901 al 2155.
    • YEAR(2): memorizza l’anno in due cifre, ma la rappresentazione è più limitata. Con due cifre la rappresentazione possibile va da 0 a 99, e si usa la convenzione per la quale da 70 a 99 sono gli anni che vanno dal 1970 al 1999; da 0 a ’69’ sono gli anni che vanno dal 2000 al 2069. È consigliabile evitare l’utilizzo di questo tipo di dato e usare YEAR(4), l’anno in quattro cifre.

    Altri tipi di dati in MySQL

    I tipi ENUM e SET sono tipi di dato speciali che operano a partire da liste di stringhe di testo e in cui i campi possono avere solo dei valori predefiniti. Il tipo ENUM fornisce un singolo valore da un elenco di valori possibili. Il tipo di SET fornisce un insieme di diversi valori da un elenco. ENUM viene memorizzato come un numero intero che rappresenta una posizione in un elenco. SET viene memorizzato come un insieme di bit, in cui ogni bit rappresenta una posizione nella lista.

     

    MySQL impone un limite per le dimensioni di una riga in una tabella. La dimensione massima di tutte le colonne di una tabella non deve superare i 65.535 byte. Questo vale per la definizione della tabella, non per il suo popolamento. I Large Object (LOB) vengono memorizzati a parte rispetto alla riga in cui vengono definiti, quindi la dimensione delle colonne di tipo Large Object non viene conteggiata per quanto riguarda il limite dei 65.535 byte.

     

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">