In MySQL, la lunghezza deve essere sempre 255 o 65.535 (a meno che non vi siano motivi specifici per tipo per scegliere una lunghezza diversa). Esistono due modi diversi per memorizzare stringhe di caratteri. Per lunghezze fino a 255, la lunghezza viene memorizzata in un byte anziché in due, salvando un byte di memoria.
In un varchar
, la lunghezza è la lunghezza massima. I valori sono memorizzati nella pagina in base alla loro lunghezza effettiva. Pertanto, la lunghezza massima non influisce sulla memorizzazione di nient'altro, ad eccezione delle lunghezze di 1 o 2 byte (a seconda che il massimo sia < = 255 o> = 256). (La lunghezza essendo una potenza di due - ad eccezione di 256 - non ha alcun effetto sullo spazio di archiviazione.)
Come per impostare le lunghezze come potenze di due. Sono colpevole di questo in molte occasioni. È una vecchia abitudine sopportare di voler mantenere i campi allineati sui limiti dei byte. L'idea era di mantenere i campi allineati sui limiti di 4 o 8 byte, perché questo è più ottimale per la CPU (si pensi al linguaggio di programmazione "C"). Questo impediva uno spazio non necessario quando un intero o un valore in virgola mobile richiedeva un allineamento di 4- o 8 byte (quindi alcuni byte sarebbero stati persi) o un sovraccarico non necessario per copiare byte dallo spazio non allineato allo spazio allineato. Naturalmente, come ho appena notato, questa logica non ha basi per i database, perché la lunghezza massima non influisce sulla memorizzazione effettiva sulla pagina.
Un altro motivo per cui questo non ha alcun significato è che il tipo varchar
memorizza effettivamente uno o due byte più della lunghezza. Il database si occupa della conversione dal formato fisico della pagina al formato fisico in memoria. Cercare di "ottimizzare" questo processo è molto più impegnativo di quanto valga.
fonte
2013-08-05 02:38:01
+1. La lunghezza di un campo varchar() dovrebbe fare poca differenza. –
interessante ..hai trovato contatti nella documentazione di mysql o è un'ipotesi educata? –
in realtà preferisco scegliere la lunghezza varchar come x potenza di 2, è più intuitivo per i ragazzi Dev. : / –