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.
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.
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.
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³⁸ |
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.
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.
|
Stringa |
CHAR(5) |
VARCHAR(5) |
|
'A' |
'A ' |
'A' |
|
'Hello' |
'Hello' |
'Hello' |
|
'Example' |
'Examp' |
'Examp' |
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.
|
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 |
|
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 |
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. |
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.
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.
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'.
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