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

MySQL:perché specificare la larghezza di visualizzazione senza utilizzare zerofill

Questa larghezza di visualizzazione aggiuntiva della "funzione" è piuttosto confusa, perché in altri tipi di colonna come CHAR è specifica la lunghezza.

Ecco una breve ripartizione:

  • Più importante:non specificando lo "spazio di archiviazione" o il "numero di cifre". Sta solo dicendo come sono formattati i dati in questa colonna prima che venga restituito. INT(5) può memorizzare lo stesso valori come INT(16) o INT(255):tutti e tre possono memorizzare tutti (e solo) valori validi per INT. INT(255) non può memorizzare un numero con 255 cifre. Lo spazio di archiviazione per tutti è lo spazio occupato da un INT.
  • Se usi ZEROFILL su una colonna con larghezza di visualizzazione e la rappresentazione della stringa del numero memorizzato è più corta della larghezza di visualizzazione, verrà riempita a sinistra con zeri. Se è più lungo, non succede nulla. Se scegli INT(5) e il valore è 13, verrà restituito come 00013. Se il valore è 123456 verrà restituito come 123456.
  • Se non usi ZEROFILL , non ci sarà alcun riempimento (senza spazi e simili)
  • Se usi ZEROFILL , devi essere consapevole che anche la colonna sarà UNSIGNED
  • In ogni caso, la larghezza di visualizzazione viene restituita quando vengono interrogati i metadati della tabella. Quindi un'applicazione potrebbe sapere come formattare i dati.

Non mi piace la larghezza di visualizzazione, perché il livello di archiviazione "conosce" la presentazione visiva dei dati archiviati. Oltre a questo, non c'è nessun uso di cui sono a conoscenza.