Non so su mySQL ma in SQL Server consente di definire campi in modo che il numero totale di byte utilizzati sia maggiore del numero totale di byte che possono essere effettivamente memorizzati in un record. Questa è una brutta cosa Prima o poi otterrai una riga in cui viene raggiunto il limite e non puoi inserire i dati.
È molto meglio progettare la struttura del database per considerare i limiti delle dimensioni delle righe.
Inoltre sì, non si desidera che le persone inseriscano 200 caratteri in un campo in cui il valore massimo dovrebbe essere 10. Se lo fanno, sono quasi sempre dati errati.
Si dice, beh, posso limitarlo a livello di applicazione. Ma i dati non entrano nel database solo da un'applicazione. A volte vengono utilizzate da più applicazioni, a volte i dati vengono importati e talvolta riparati manualmente dalla finestra della query (aggiornare tutti i record per aggiungere il 10% al prezzo, ad esempio). Se nessuna di queste altre fonti di dati non è a conoscenza delle regole inserite nell'applicazione, nel database saranno presenti dati non validi e inutili. L'integrità dei dati deve essere applicata a livello di database (che non ti impedisce di controllare anche prima di provare a inserire dati) o di non avere integrità. Inoltre è stata la mia esperienza che le persone che sono troppo pigre per progettare il proprio database sono spesso troppo pigre per mettere effettivamente i limiti nell'applicazione e non c'è alcun controllo sull'integrità dei dati.
Hanno una parola per i database senza integrità dei dati - inutile.
Ma perché dovrei impostare la lunghezza a 20? Se non c'è differenza, posso semplicemente impostarlo su 255 per tutti i campi, no? – caw
vedi la mia modifica - elabora un po 'di più. – OneNerd
Grazie. Quindi non fa alcuna differenza convergere memoria e prestazioni, giusto? Ma può essere utile, tuttavia, ad es. se vuoi tagliare stringhe per evitare quelle lunghe. Ma potresti anche farlo prima se hai usato substr() in PHP o una funzione simile in un'altra lingua !? – caw