L'ho sempre usato VARCHAR(320)
. Ecco perché. Lo standard impone le seguenti limitazioni:
- 64 caratteri per la "parte locale" (nome utente).
- 1 carattere per il
@
simbolo.
- 255 caratteri per il nome del dominio.
Ora, alcune persone diranno che è necessario supportare di più. Alcune persone diranno anche che è necessario supportare Unicode per i nomi di dominio (il che significa che è necessario passare a NVARCHAR
). Mentre lo standard potrebbe cambiare nel frattempo (è da un po 'che non ho skin nel gioco), sono abbastanza fiducioso che in questo momento la maggior parte dei server nel mondo non accetteranno indirizzi e-mail Unicode e sono sicuro molti server avranno problemi a creare e / o accettare indirizzi con> 320 caratteri.
Detto questo, puoi prepararti al peggio ora, se lo desideri (e se stai utilizzando la compressione dei dati in SQL Server 2008 R2 o superiore, beneficerai della compressione Unicode, il che significa che pagherai solo la penalità di 2 byte per i caratteri che hanno effettivamente bisogno esso). In questo modo puoi allargare la tua colonna quanto vuoi e puoi permettere alle persone di riempire qualsiasi spazzatura troppo lunga lì dentro che vogliono - non riceveranno un'e-mail se ti danno spazzatura proprio come non vogliono ricevere un'e-mail se l'inserimento non riesce. Il problema è se lasci entrare spazzatura non valida, tuavere a che fare con esso. E non importa quale sia la tua dimensione: se qualcuno proverà a riempire 400 caratteri in una colonna di 320 caratteri, qualcuno proverà a riempire 1025 caratteri in una colonna di 1024 caratteri. Non vi è alcun motivo per cui una persona sensibile dovrebbe avere un indirizzo e-mail> 320 caratteri a meno che non lo utilizzino per testare esplicitamente i confini del sistema.
Ma smetti di chiedere opinioni su questo - e smetti di guardare altre implementazioni come guida (succede solo che in questo caso quelle a cui hai fatto riferimento non si sono preoccupate di fare i compiti e hanno semplicemente selezionato i numeri dai loro, beh, sai) . Hai accesso diretto allo standard : assicurati di consultare la versione più recente, di supportarla come minimo e di rimanere in cima allo standard in modo da poterti adattare alle modifiche delle specifiche.
MODIFICA grazie a @ypercube per il ping in chat.
A parte questo, forse non vuoi scaricare l'intero indirizzo in una singola colonna in primo luogo. La normalizzazione potrebbe suggerire che non si desidera archiviare @hotmail.com
15 milioni di volte in cui un FK molto più magro funzionerebbe perfettamente e non avrebbe l'overhead aggiuntivo di colonne di lunghezza variabile. Si potrebbe anche normalizzare il nome utente, come john.smith@hotmail.com
e john.smith@gmail.com
condividono un nome utente comune - non sanno l'un l'altro, ma il database non si preoccupa di questo.
Ne ho parlato in parte qui:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/
Ciò introduce tuttavia delle sfide al limite di 254 caratteri sopra, poiché non sembra esserci consenso su ciò che accade quando un dominio valido di 255 caratteri viene combinato con una parte locale valida di 1 carattere. Questo dovrebbe essere accettato dalla maggior parte dei server in tutto il mondo, ma sembra violare questo limite di 254 caratteri. Quindi crei una Domains
tabella che ha una limitazione artificialmente inferiore sulla lunghezza per gli indirizzi di posta elettronica, quando il dominio può essere riutilizzato come un URL valido di 255 caratteri?