CodeGym /Corsi /SQL SELF /Tipi di dati testuali: CHAR, VARCHAR...

Tipi di dati testuali: CHAR, VARCHAR, TEXT

SQL SELF
Livello 15 , Lezione 2
Disponibile

Tipi di dati testuali: CHAR, VARCHAR, TEXT

Quando si parla di lavorare con dati testuali in PostgreSQL, abbiamo tre protagonisti principali: CHAR, VARCHAR e TEXT. Ognuno ha le sue particolarità, vantaggi e sfumature. Vediamo insieme come funzionano.

CHAR(n)

CHAR, o character, rappresenta una stringa di lunghezza fissa n. Se la stringa contiene meno caratteri di quelli specificati, viene automaticamente riempita con spazi.

Esempio:

id codice - CHAR(5)
1 ''ABC''

Questo tipo è comodo quando tutte le stringhe devono avere la stessa lunghezza (tipo codici, codici a barre o identificatori di lunghezza fissa).

Ma se lavori con testo di lunghezza variabile, gli spazi aggiuntivi occupano solo spazio inutile nel database.

VARCHAR(n)

VARCHAR, o variable character, serve per salvare stringhe di lunghezza variabile con un limite massimo di n caratteri.

Esempio:

id username - VARCHAR(10)
1 ''Alice''

Questo tipo usa lo spazio in modo efficiente, perché salva solo il testo reale. Lo svantaggio è che devi specificare il limite di lunghezza. Se la stringa supera il limite, il database ti darà errore.

TEXT

TEXT è un tipo di dato testuale senza limiti di lunghezza. Si usa spesso quando non sai quanto può diventare lungo il testo.

Esempio:

id contenuto - TEXT
1 ''Questo è un testo lungo. Nessun limite!''

Vantaggi: puoi salvare testi di qualsiasi lunghezza senza preoccuparti dei limiti.

Svantaggi: l'assenza di limiti può portare a un uso inefficiente del database se i dati testuali iniziano a "gonfiarsi".

Confronto tra tipi di dati testuali

Quando lavori con il testo, è importante capire quale tipo di dato è adatto per ogni caso. Ecco le differenze principali tra CHAR, VARCHAR e TEXT:

Tipo di dato Lunghezza Performance Quando usarlo?
CHAR(n) Fissa Più veloce per stringhe di lunghezza fissa Per codici di lunghezza fissa (tipo ISO)
VARCHAR(n) Lunghezza massima n Più veloce di TEXT se c'è un limite Per stringhe di lunghezza variabile con un massimo noto
TEXT Illimitata Il più versatile Per testi lunghi di cui non puoi prevedere la lunghezza

Esempi pratici di utilizzo

Ok, vediamo come usare questi tipi di dati in scenari reali.

Esempio 1: Usare CHAR per codici di lunghezza fissa

Immagina di lavorare con un database dove devi salvare i codici delle città secondo lo standard ISO 3166-1 alpha-3. Ogni codice deve avere esattamente 3 caratteri.

city_id city_name - VARCHAR(50) iso_code - CHAR(3)
1 New York NYC
2 Los Angeles LAX
3 Chicago CHI

Qui CHAR(3) è perfetto, perché ogni codice ISO della città ha lunghezza fissa.

Esempio 2: Usare VARCHAR per i nomi utente

Il nome utente è un ottimo caso per VARCHAR. Di solito ha lunghezza variabile, ma possiamo supporre che non supererà mai 50 caratteri.

user_id username - VARCHAR(50) email - VARCHAR(50)
1 Alice alice@example.com
2 Bob bob@example.net

VARCHAR in questo caso risparmia spazio, perché la lunghezza reale della stringa può essere inferiore a 50 caratteri.

Esempio 3: Usare TEXT per salvare descrizioni

Immagina di avere un blog dove per ogni post devi salvare una lunga descrizione testuale. Qui la scelta migliore è TEXT.

post_id title - VARCHAR(100) content - TEXT
1 Post 1 Questo è un contenuto molto lungo di un post del blog che continua e continua...

Se non sai mai in anticipo quanto sarà lungo il testo, TEXT è perfetto.

4. Altri dettagli e trappole

Lavorando con tipi di dati testuali ci sono alcune cose da tenere a mente per evitare errori tipici.

Problema: CHAR aggiunge spazi

Se provi a confrontare stringhe in un campo CHAR senza considerare gli spazi aggiunti, potresti avere risultati inaspettati.

SELECT * FROM cities WHERE iso_code = 'NYC';
-- Non ritorna nulla se non togli gli spazi

Come risolvere: Usa la funzione TRIM() per togliere gli spazi.

SELECT * FROM cities WHERE TRIM(iso_code) = 'NYC';

Problema: I limiti di lunghezza in VARCHAR possono causare errori

Se provi a inserire in un campo VARCHAR una stringa che supera il massimo, il database ti darà errore.

INSERT INTO users (username, email) VALUES ('A_username_that_is_too_long_for_field', 'test@example.com');
-- Errore

Come risolvere: Assicurati che il limite di lunghezza (n) sia adatto alle tue esigenze reali. Oppure usa TEXT per evitare limiti.

Problema: TEXT può gonfiare il tuo database

TEXT salva dati illimitati, il che può far crescere troppo le tabelle e rendere più difficile l'indicizzazione.

Come evitarlo: Se pensi di indicizzare spesso una colonna TEXT, valuta di usare un VARCHAR limitato.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION