Mysql
 sql >> Database >  >> RDS >> Mysql

varchar(20) e varchar(50) sono gli stessi?

MySQL offre una scelta di motori di archiviazione. L'archiviazione fisica dei dati dipende dal motore di archiviazione.

MyISAM Storage di VARCHAR

In MyISAM, VARCHAR s in genere occupano solo la lunghezza effettiva della stringa più uno o due byte di lunghezza. Ciò è reso pratico dalla limitazione del design di MyISAM al blocco delle tabelle anziché alla capacità di blocco delle righe. Le conseguenze sulle prestazioni includono un profilo della cache più compatto, ma anche un calcolo più complicato (più lento) degli offset dei record.

(In effetti, MyISAM ti offre un grado di scelta tra formati di tabella di dimensioni fisiche di riga fisse e dimensioni di riga fisiche variabili a seconda dei tipi di colonna presenti nell'intera tabella. Occorrenza di VARCHAR cambia solo il metodo predefinito, ma la presenza di un TEXT blob forze VARCHAR s nella stessa tabella per utilizzare anche il metodo della lunghezza variabile.)

Il metodo di archiviazione fisica è particolarmente importante con gli indici, che è una storia diversa rispetto alle tabelle. MyISAM usa la compressione dello spazio per entrambi CHAR e VARCHAR colonne, il che significa che i dati più brevi occupano meno spazio nell'indice in entrambi i casi.

Archiviazione InnoDB di VARCHAR

InnoDB, come la maggior parte degli altri database relazionali attuali, utilizza un meccanismo più sofisticato. VARCHAR le colonne la cui larghezza massima è inferiore a 768 byte verranno archiviate in linea, con la stanza riservata corrispondente alla larghezza massima. Più precisamente qui :

InnoDB attualmente non esegue la compressione dello spazio nei suoi indici, l'opposto di MyISAM come descritto sopra.

Torna alla domanda

Tutto quanto sopra è tuttavia solo un dettaglio implementativo che può anche cambiare tra le versioni. La vera differenza tra CHAR e VARCHAR è semantico, così come quello tra VARCHAR(20) e VARCHAR(50) . Assicurandoti che non ci sia modo di memorizzare una stringa di 30 caratteri in un VARCHAR(20) , il database rende la vita più facile e meglio definita per vari processori e applicazioni che presumibilmente integra in una soluzione dal comportamento prevedibile. Questo è il grosso problema.

Per quanto riguarda in particolare i nomi personali, questa domanda potrebbe darti delle indicazioni pratiche. Le persone con nomi completi superiori a 70 caratteri UTF-8 sono comunque nei guai.