🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
28 maggio 2024 Di Matthew Rathbone

Cambiare il tipo di una colonna in MySQL è un'operazione comune quando lavori con i database. Potresti doverlo fare per gestire nuovi requisiti sui dati o per ottimizzare le prestazioni. Questo tutorial ti spiega come cambiare il tipo di colonna con l'istruzione ALTER TABLE, con esempi pratici.

Capire l'istruzione ALTER TABLE

L'istruzione ALTER TABLE serve a modificare la struttura di una tabella esistente. Può aggiungere, eliminare o modificare colonne e indici. Per cambiare il tipo di una colonna, la sintassi di base è:

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

Analizziamo la sintassi:

  • table_name: il nome della tabella che contiene la colonna da modificare.
  • column_name: il nome della colonna da modificare.
  • new_data_type: il nuovo tipo di dato da assegnare alla colonna.

Esempio: cambiare il tipo di colonna in MySQL

Considera una tabella chiamata users con la seguente struttura:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    age INT
);

Puoi controllare la struttura iniziale con:

DESCRIBE users;

Output previsto:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Cambiare il tipo della colonna age

Supponiamo che tu voglia cambiare la colonna age da INT a TINYINT, perché l'intervallo delle età è ridotto e vuoi risparmiare spazio.

ALTER TABLE users MODIFY COLUMN age TINYINT;

Eseguendo il comando qui sopra, la colonna age diventerà TINYINT. Verifica la modifica:

DESCRIBE users;

Output previsto:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | tinyint     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Nota che TINYINT può memorizzare un intervallo di numeri più ridotto rispetto a INT. Come puoi immaginare, questo può causare problemi nella conversione dei dati della tabella. Ne parlo nella sezione Conversion Issues più sotto.

Cambiare il tipo della colonna username

Ora cambiamo la colonna username da VARCHAR(50) a VARCHAR(100) per consentire nomi utente più lunghi.

ALTER TABLE users MODIFY COLUMN username VARCHAR(100);

Verifica la modifica:

DESCRIBE users;

Output previsto:

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| username | varchar(100) | YES  |     | NULL    |                |
| age      | tinyint      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

Gestire i problemi di conversione dei dati

Quando cambi il tipo di una colonna, potresti incontrare problemi se i dati esistenti non sono compatibili con il nuovo tipo. MySQL proverà a convertire i dati esistenti, ma se un valore non può essere convertito, potresti ottenere valori NULL o dati troncati.

Esempio: troncamento dei dati - da INT a TINYINT

Nel nostro esempio da INT a TINYINT c'è il rischio di troncamento dei dati, perché TINYINT non supporta lo stesso intervallo di valori di INT.

  • INT può memorizzare valori da -2.147.483.648 a 2.147.483.647 (con segno) o da 0 a 4.294.967.295 (senza segno).
  • TINYINT può memorizzare valori da -128 a 127 (con segno) o da 0 a 255 (senza segno).

Ecco cosa succede durante la conversione:

a. Se i valori INT della colonna rientrano nell'intervallo di TINYINT, verranno convertiti senza problemi.
b. Se i valori INT superano l'intervallo di TINYINT, verranno troncati per rientrarvi. Ad esempio, un valore INT di 300 verrà troncato a 127 per un TINYINT con segno o a 255 per un TINYINT senza segno.

A seconda delle impostazioni della SQL mode, MySQL potrebbe generare avvisi o errori durante la conversione se i dati superano i limiti del nuovo tipo.

Esempio: passare a un tipo non compatibile

Considera questo scenario:

ALTER TABLE users MODIFY COLUMN age CHAR(3);

Questo cambia la colonna age in CHAR(3). Tuttavia, se un'età supera 999, verrà troncata ai primi tre caratteri. Assicurati sempre che il nuovo tipo possa gestire i dati esistenti, per non perdere informazioni.

Conclusione

Per cambiare il tipo di una colonna in MySQL si usa l'istruzione ALTER TABLE con la clausola MODIFY COLUMN. Verifica sempre le modifiche e fai attenzione ai problemi di conversione dei dati. Questo tutorial ti ha mostrato come farlo con esempi pratici, così potrai applicarlo con sicurezza nei tuoi progetti.

Capendo e usando l'istruzione ALTER TABLE, puoi gestire e ottimizzare in modo efficace le strutture dei tuoi database in MySQL.

Beekeeper Studio è una GUI per database gratuita & open source

Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

Cosa dicono gli utenti di Beekeeper Studio

★★★★★
"Beekeeper Studio ha sostituito completamente il mio vecchio flusso di lavoro con MySQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
— Alex K., Database Developer
★★★★★
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo lavoro con MySQL?

download Scarica gratis