• User Attivo

    progettazione database mysql

    Ciao,
    premetto che ho una conoscenza molto frammentaria sulla materia.

    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)?
    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?

    Ovviamente lo spazio riservato nel secondo caso è maggiore, ma siccome risulta sovradimensionato, cosa succede? Aumentano le dimensioni del database? Diminuiscono le prestazioni? Che altro?


  • Super User

    @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