@Ministry said:
Che differenza c'è, nella progettazione di un db Mysql, definire un campo INT(2) piuttosto che INT(11), anche se a priori so che il numero non supererà le due cifre (è un esempio)?
Il campo di tipo INT occupa 4 bytes e ammette valori da da -2147483648 a 2147483647 (UNSIGNED). Il numero indicato è opzionale e non indica le cifre che è possibile inserire, ma indica come mysql deve immagazzinare un numero riempendo con spazi o zeri fono a N. Per esempio INT(4) con ZEROFILL, se salvo il numero 43 verrà immagazzinato come 0043. Ciò non toglie che se salvo 654321 verrà immagazzinato integralmente.
@Ministry said:
La stessa cosa riguarda le stringhe di testo: che differenza c'è tra un VARCHAR(10) e un LONGTEXT, anche sapendo che il testo inserito non supererà mai i 10 caratteri?
VARCHAR(N) occupa N + 1 bytes con occupazione dinamica fino al massimo di 256 bytes (255+1) o al numero dei byte dichiarati.
LONGTEXT: Può contenere fino a 4.294.967.295 caratteri alfanumerici. La memoria occupata è di (lunghezza) + 4 bytes
@Ministry said:
Ovviamente lo spazio riservato nel secondo caso è maggiore, ma siccome risulta sovradimensionato, cosa succede? Aumentano le dimensioni del database? Diminuiscono le prestazioni? Che altro?
Aumentano le dimensioni. Le prestazioni diminuiscono, ma per database piccoli la differenza è irrisoria