Nell'archiviazione, VARCHAR(255)
è abbastanza intelligente da memorizzare solo la lunghezza necessaria su una determinata riga, a differenza della CHAR(255)
quale memorizzerebbe sempre 255 caratteri.
Ma poiché hai etichettato questa domanda con MySQL, menzionerò un suggerimento specifico di MySQL: quando le righe vengono copiate dal livello del motore di archiviazione al livello SQL, i VARCHAR
campi vengono convertiti in CHAR
per ottenere il vantaggio di lavorare con righe a larghezza fissa. Quindi le stringhe in memoria vengono riempite fino alla lunghezza massima della VARCHAR
colonna dichiarata .
Quando la tua query genera implicitamente una tabella temporanea, ad esempio durante l'ordinamento o GROUP BY
, questo può utilizzare molta memoria. Se si utilizzano molti VARCHAR(255)
campi per dati che non devono essere così lunghi, la tabella temporanea può essere molto grande.
Potresti anche sapere che questo comportamento di "riempimento" significa che una stringa dichiarata con il set di caratteri utf8 si estende fino a tre byte per carattere anche per le stringhe memorizzate con contenuto a byte singolo (ad es. Caratteri ascii o latin1). Allo stesso modo, il set di caratteri utf8mb4 fa sì che la stringa si riempia fino a quattro byte per carattere in memoria.
Quindi un VARCHAR(255)
in utf8 che memorizza una breve stringa come "Nessuna opinione" richiede 11 byte su disco (dieci caratteri con set di caratteri inferiori, più un byte per la lunghezza) ma richiede 765 byte in memoria, e quindi in tabelle temporanee o risultati ordinati.
Ho aiutato gli utenti MySQL che creavano inconsapevolmente tabelle temporanee da 1,5 GB frequentemente e riempivano il loro spazio su disco. Avevano molte VARCHAR(255)
colonne che in pratica memorizzavano stringhe molto brevi.
È meglio definire la colonna in base al tipo di dati che si intende archiviare. Ha dei vantaggi nel far rispettare i vincoli relativi alle applicazioni, come hanno già detto altre persone. Ma ha i benefici fisici per evitare lo spreco di memoria che ho descritto sopra.
È difficile sapere quale sia l'indirizzo postale più lungo, ovviamente, motivo per cui molte persone scelgono un lungo VARCHAR
che è sicuramente più lungo di qualsiasi indirizzo. E 255 è consuetudine perché è la lunghezza massima di a VARCHAR
per la quale la lunghezza può essere codificata con un byte. Era anche la VARCHAR
lunghezza massima in MySQL precedente alla 5.0.