State progettando la tabella del vostro database, e dovete definire un tipo per memorizzare delle stringhe (caratteri alfanumerici) ed improvvisamente vi sorge un dubbio, ma devo usare un CHAR o VARCHAR, qual'è la differenza? Andiamo a conoscere questi tipi più da vicini e chiariamo ogni dubbio sul loro utilizzo.
Sia il CHAR che il VARCHAR vengono usati per archiviare nel nostro database una sequenza di caratteri alfanumerici come testo, praticamente stringhe, solo che il primo viene usato per quelle fisse mentre il secondo per quelle a lunghezza variabili. I concetti espressi sono pressapoco identici per tutti i motori di database, ma supponendo di riferirci al RDBMS MySql, vediamo i tipi CHAR e VARCHAR nel dettaglio.
Il tipo CHAR
Permette di specificare sequenze di caratteri (stringhe) di lunghezza fissa, considerando che ogni carattere occupa 1 byte, definendo un CHAR(10) la dimensione di questo dato nella cella sarà sempre di 10 bytes anche se inseriamo il valore "ciao" che ne occuperebbe soltanto 4.
Il tipo CHAR viene allocato nella memoria statica ed è più veloce nell'accesso in lettura rispetto al tipo VARCHAR.
Il tipo VARCHAR
Viene usato per specificare una sequenza di caratteri (stringhe) di lunghezza variabile, ed anche qui che ogni carattere occupa 1 byte, però a differenza del CHAR lo spazio occupato non è fisso ma si "adatta" al contenuto inserito nel campo, quindi come prima definendo un VARCHAR(10) ed inseriamo il valore "ciao", ne occupa soltanto 4 bytes a dispetto dei 10 fissi del CHAR.
Il tipo VARCHAR viene allocato nella memoria dinamica ed è pertanto più lento nell'accesso in lettura rispetto al tipo CHAR.
N.B. Sia il tipo CHAR che VARCHAR non accettano caratteri UNICODE, potendo infatti memorizzare un solo byte per carattere, possono raccogliere al massimo 255 "simboli", un valore non sufficiente per esprimere tutta la tabella dei "simboli" UNICODE, mentre vanno bene per quelli ASCII. Per le stringhe UNICODE occorre settare il CHARACTER SET in UTF8 per MySql ed usare i campi NCHAR ed NVARCHAR per SqlServer, sappiate però che in questo caso ogni carattere vi occuperà ben 2 bytes, quindi usatelo solo se ne avete reale necessità.
Conclusioni su CHAR e VARCHAR
Detto questo, i due tipi sono molto simili, allora quando usare il tipo CHAR e VARCHAR? Dipende sempre dal contesto di utilizzo, se sappiamo per certo che il campo dovrà contenere un numero fisso di caratteri, come ad es. una partita iva (11 caratteri), allora scegliamo senza indugi il CHAR di lunghezza 11, così da avere maggiore velocità in lettura del dato. Se invece non conosciamo la dimensione esatta del campo, come nel caso di un nome o di una via, allora utilizzeremo il tipo VARCHAR di modo da risparmiare una notevole quantità di spazio di archiviazione sul nostro database.
Da bravi progettisti del database dobbiamo operare le scelte più appropriate per la definizione dei nostri campi, pena un notevole decadimento delle performace della nostra applicazione. Piccoli ma importanti accorgimenti come questi possono fare la differenza tra un'applicazione prestante o meno.
Se avete qualcosa da aggiungere o domandare alla differenza tra CHAR e VARCHAR fatelo pure tramite lo spazio dei commenti, ogni vostro intervento sarà gradito e contribuirà a far accrescere le informazioni su questo argomento.