2009-02-19 15 views
7

Quali sono le dimensioni utilizzate per i campi comuni del database, come firstName, lastName, email, password, ecc.? Vedo questi campi comuni in molti database di blog, forum, e-commerce, ecc. Ma non so se esiste qualche riferimento o valore predefinito per le dimensioni per i campi comuni. Quindi, voglio sapere qual è il metodo/riferimento/base da utilizzare per selezionare le dimensioni per i campi comuni.Dimensioni predefinite per i campi del database

+0

Vedere: http://stackoverflow.com/questions/512614/what-are-the-recommended-database-column-sizes-for-names/ – PartialOrder

risposta

12

In parte, dipende dal DBMS. Alcuni, come MySQL 5, si preoccupano della lunghezza di una colonna VARCHAR (n) anziché di una colonna TEXT di lunghezza illimitata; altri, come PostgreSQL, considerano TEXT e VARCHAR (n) come internamente identici, con l'eccezione che una lunghezza viene controllata su colonne VARCHAR (n). Scrivere qualcosa come VARCHAR (65536) in PostgreSQL è sciocco; se vuoi una colonna di lunghezza illimitata, scegli TESTO e fallo con esso.

Ovviamente, a volte il tentativo di memorizzare un valore troppo lungo interromperà il layout o consentirà a qualcuno di abusare del sistema scegliendo un nome lungo senza spazi (ad esempio). Di solito quello che faccio per i campi del nome utente è semplicemente scegliere una lunghezza massima tale che chiunque voglia un nome utente più lungo stia cercando di causare problemi; 64 caratteri è un bel valore rotondo e sembra funzionare bene. Per i nomi e gli indirizzi reali (che spesso non vengono visualizzati dagli utenti come un nome utente), ti consigliamo di utilizzare qualcosa di più lungo. Volete un valore abbastanza grande da poter accettare qualsiasi input valido, ma non così grande che qualcuno possa riempire una stringa di gigabyte sul campo solo per attaccare il vostro sistema. 1024 caratteri sono abbastanza ragionevoli: 1k è una quantità di testo abbastanza piccola da funzionare facilmente, un numero tondo e più grande di qualsiasi indirizzo o nome sensato.

Gli indirizzi di posta elettronica possono, per la RFC associata il cui numero sono troppo pigro per cercare ora, non più lungo di 320 caratteri. Quindi c'è la lunghezza del tuo campo email. Si scopre che SMTP limita la lunghezza dei campi a 256 caratteri; poiché gli indirizzi email devono essere racchiusi tra parentesi, l'indirizzo email valido più lungo è in realtà di 254 caratteri. (This page entra più nel dettaglio.) Quindi c'è la lunghezza del campo di posta elettronica.

password dovrebbero MAI essere immagazzinate in chiaro, in modo che il campo della password dovrebbe essere un array di byte o BLOB digitare esattamente il tempo necessario per memorizzare l'output della funzione di hash che si sta utilizzando (o più grande elemento del gruppo crittografico in uso, per schemi più avanzati come SRP-6a).

+5

Solo i programmatori pensano che 64 sia un "bel valore rotondo" :) –

+1

Sai, ho letto la riga "nice round value" e non ci ho pensato fino a quando non l'hai menzionata. :-) –

+1

Questo vale per 3 di noi, non ci ho nemmeno pensato, infatti mi sono detto "64 è un bel numero rotondo, forse anche 128 se vuoi un campo più grande", io e la mia maledetta mentalità di programmazione – UnkwnTech

1

Quello che tendo a fare è pensare a quanto può essere lungo il valore di un campo, quindi raddoppiarlo per sicurezza.

E.g. Nome: varchar (70) Email: varchar (200)

+0

Un indirizzo email può contenere fino a 320 caratteri. – PartialOrder

2

mi piace 16, 32, 64, 128, o 256

+0

strano ma così vicino al mio - ho appena finito il mio - 10, 20, ... 120, 250 – IEnumerator

+0

i poteri di 2 rendono felice il computer! –

1

doppie le stime. E poi raddoppiarli per accogliere l'unicode.

I database che hanno varchar (quasi tutti) comportano una penalità molto piccola per i campi progettati per contenere valori più lunghi ma non per. Puoi usarlo a tuo vantaggio.

1

Provate a pensare al contrario: ho usato i dati esistenti per ottenere lunghezze di campo ragionevoli. Supponendo di avere accesso a una buona dimensioni del database pieno di dati reali, una query rapida come:

SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase 

vi darà tutto il necessario.

AGGIORNAMENTO: non utilizzare il numero che si ottiene esattamente.Ovviamente, riempilo un po 'a seconda della tua incertezza, a meno che tu non abbia un campionamento molto ampio.

Problemi correlati