Learning Center
Database MySQL

Tipi di dati MySQL: panoramica, esempi di utilizzo e best practice

19 gen 2026
Hostman Team
Hostman Team

Durante la configurazione di un database in MySQL, l’utente deve assegnare un nome e un tipo di dati a ciascuna colonna di una tabella. Questo processo consente al sistema di comprendere esattamente quale tipo di dati verrà memorizzato e come verrà elaborato, oltre a determinare la quantità di memoria necessaria.

Esistono diverse classi principali di tipi di dati nelle tabelle MySQL, tra cui tipi numerici, tipi di caratteri, tipi di data e ora e altri. Ogni classe contiene diversi tipi di dati specifici. È importante definirli correttamente nella fase iniziale di creazione delle tabelle per evitare problemi una volta completata la struttura del database.

Questo articolo descrive i principali tipi di dati MySQL, la loro struttura, i valori validi e le modalità di utilizzo consigliate.

Tipi numerici
Copia link

MySQL supporta tutti i tipi di dati numerici SQL standard, utilizzati per memorizzare numeri. Questo articolo tratta:

  • Interi

  • Numeri in virgola mobile

  • Numeri a virgola fissa

Ciascuno di questi viene descritto più nel dettaglio di seguito.

Interi
Copia link

Gli interi vengono utilizzati per memorizzare numeri interi con segno o senza segno. I tipi con segno possono memorizzare valori positivi e negativi, mentre i tipi senza segno memorizzano solo valori positivi, raddoppiando di fatto l’intervallo di valori.

Esistono cinque tipi principali di interi: TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT. La differenza principale riguarda l’intervallo di valori che possono memorizzare: maggiore è l’intervallo, maggiore è la quantità di memoria richiesta. È importante selezionare il tipo corretto per allocare la memoria in modo efficiente durante la creazione delle tabelle.

Tipo

Memoria (byte)

Intervallo con segno

Intervallo senza segno

TINYINT

1

−2⁷ a 2⁷−1

0 a 2⁸−1

SMALLINT

2

−2¹⁵ a 2¹⁵−1

0 a 2¹⁶−1

MEDIUMINT

3

−2²³ a 2²³−1

0 a 2²⁴−1

INT

4

−2³¹ a 2³¹−1

0 a 2³²−1

BIGINT

8

−2⁶³ a 2⁶³−1

0 a 2⁶⁴−1

La specifica della dimensione (ad esempio MEDIUMINT(6)) non influisce sull’intervallo di valori. È puramente estetica e viene utilizzata da alcuni strumenti per riempire i numeri più corti con spazi.
È possibile utilizzare anche l’attributo ZEROFILL per riempire con zeri anziché con spazi. Ad esempio, SMALLINT(8) ZEROFILL visualizzerà 256 come 00000256.

Numeri in virgola mobile
Copia link

Vengono utilizzati per memorizzare valori numerici approssimativi. MySQL consente di definire la precisione nel seguente modo:

FLOAT(p)

Dove p è la precisione, compresa tra 0 e 53.

  • Se p < 25, viene utilizzato FLOAT (precisione singola).

  • Altrimenti, viene utilizzato DOUBLE (precisione doppia).

Tipo

Memoria (byte)

Intervallo di valori

FLOAT

4

~±3,4028 × 10³⁸

DOUBLE

8

~±1,7976 × 10³⁸

Numeri a virgola fissa
Copia link

Vengono utilizzati per memorizzare valori esatti con una precisione definita. I tipi DECIMAL o NUMERIC sono utilizzati, in particolare per i calcoli finanziari, dove l’arrotondamento non è accettabile.

Definizione:

DECIMAL(M, D)

  • M: numero totale di cifre (fino a 65; valore predefinito 10)

  • D: numero di cifre dopo la virgola (0–30; valore predefinito 0)

Esempio:

DECIMAL(6, 3)

Memorizza valori da -999.999 a 999.999.
DECIMAL e NUMERIC sono funzionalmente equivalenti.

Tipi di caratteri
Copia link

Progettati per memorizzare testi brevi, i tipi di dati di caratteri in MySQL includono CHAR e VARCHAR. Sono simili, ma differiscono per il modo in cui i dati vengono memorizzati e recuperati.

CHAR memorizza una stringa a lunghezza fissa (da 0 a 2⁸−1 caratteri), definita al momento della creazione della tabella. Se viene inserita una stringa più corta, i caratteri rimanenti vengono riempiti con spazi.

VARCHAR memorizza una stringa a lunghezza variabile (da 0 a 2¹⁶−1 caratteri). A differenza di CHAR, memorizza solo il numero effettivo di caratteri e utilizza 1 byte aggiuntivo per memorizzare la lunghezza della stringa.

Se la stringa di input supera la lunghezza definita per CHAR o VARCHAR, viene troncata.

Durante la creazione della tabella, se vengono combinate colonne CHAR e VARCHAR, MySQL convertirà automaticamente CHAR in VARCHAR.

Confronto tra CHAR(5) e VARCHAR(5)
Copia link

Stringa

CHAR(5)

VARCHAR(5)

'A'

'A '

'A'

'Hello'

'Hello'

'Hello'

'Example'

'Examp'

'Examp'

Tipi TEXT e binari
Copia link

Il tipo TEXT in MySQL viene utilizzato per memorizzare grandi quantità di dati testuali, mentre il tipo BLOB è progettato per dati binari come immagini, codice compilato o audio.

Differenze principali:

  • BLOB: ordinamento e confronti sensibili alle maiuscole/minuscole.

  • TEXT: ordinamento e confronti non sensibili alle maiuscole/minuscole.

MySQL non può indicizzare l’intera lunghezza dei campi TEXT o BLOB e non supporta l’ordinamento tramite indici sull’intero campo.

Se la lunghezza della stringa supera il massimo consentito, l’input viene troncato.

Tipi TEXT
Copia link

Tipo

Memoria (byte)

Caratteri max

TINYTEXT

2⁸−1

fino a 2⁸−1

TEXT

2¹⁶−1

fino a 2¹⁶−1

MEDIUMTEXT

2²⁴−1

fino a 2²⁴−1

LONGTEXT

2³²−1

fino a 2³²−1

Tipi BLOB
Copia link

Tipo

Memoria (byte)

Byte max

TINYBLOB

2⁸−1

fino a 2⁸−1

BLOB

2¹⁶−1

fino a 2¹⁶−1

MEDIUMBLOB

2²⁴−1

fino a 2²⁴−1

LONGBLOB

2³²−1

fino a 2³²−1

Data e ora
Copia link

MySQL fornisce diversi tipi di dati per memorizzare informazioni di data e ora:

Tipo

Memoria (byte)

Descrizione

DATE

3

Memorizza solo la data nel formato YYYY-MM-DD.

DATETIME

8

Memorizza data e ora nel formato YYYY-MM-DD HH:MM:SS.

TIMESTAMP

4

Simile a DATETIME, ma con un intervallo più limitato (1970–2038).

TIME

3

Memorizza solo l’ora, da −838:59:59 a 838:59:59.

YEAR

1

Memorizza solo l’anno nel formato YYYY.

JSON
Copia link

MySQL supporta un tipo di dati JSON nativo dalla versione 5.7.8, che offre i seguenti vantaggi:

  • Validazione automatica dei dati JSON.

  • Formato di archiviazione binario ottimizzato per un accesso e interrogazioni più rapide.

La memoria richiesta è approssimativamente equivalente a LONGTEXT.

Tipi compositi
Copia link

MySQL fornisce tipi di stringa speciali che memorizzano valori da un insieme fisso predefinito: ENUM e SET.

  • ENUM memorizza un singolo valore dall’elenco e richiede fino a 2 byte di memoria.

  • SET può memorizzare fino a 26 valori contemporaneamente e utilizza fino a 8 byte di memoria.

Esempio
Copia link

ENUM('a', 's', 'd')

La colonna può contenere solo uno dei seguenti valori: 'a', 's' o 'd'.

SET('a', 's', 'd')

La colonna può contenere qualsiasi combinazione dei valori elencati, inclusi:
'a', 's', 'd', 'a,s', 'a,d', 's,d', 'a,s,d' oppure un insieme vuoto ('').

Se un utente inserisce un valore come ('a', 's', 'a') in un SET, MySQL rimuove automaticamente i duplicati e ordina i valori in base all’ordine di dichiarazione originale. Il valore memorizzato sarà quindi 'a,s'.

Conclusione
Copia link

Questo articolo ha illustrato i tipi di dati MySQL più comunemente utilizzati per definire le colonne delle tabelle. Grazie a queste conoscenze, gli utenti possono selezionare i tipi appropriati e progettare in modo efficace la struttura del database. Per tipi di dati più dettagliati e meno comuni, si consiglia di consultare la documentazione ufficiale di MySQL.

È possibile utilizzare i database cloud di Hostman per esercitarsi a lavorare con MySQL e i suoi diversi tipi di dati. I principali vantaggi dell’utilizzo di MySQL nel cloud includono:

  • Manutenzione e configurazione del database da parte del provider

  • Elevata affidabilità, alta disponibilità e tolleranza ai guasti

  • Backup automatici

  • Scalabilità orizzontale e verticale rapida

  • Funzionamento continuo tramite replica in cluster

  • Esecuzione del database sulle risorse computazionali di una piattaforma cloud