Eu sempre usei VARCHAR(320)
. Aqui está o porquê. O padrão determina as seguintes limitações:
- 64 caracteres para a "parte local" (nome de usuário).
- 1 caractere para o
@
símbolo.
- 255 caracteres para o nome do domínio.
Agora, algumas pessoas dirão que você precisa apoiar mais do que isso. Algumas pessoas também dizem que você precisa dar suporte ao Unicode para nomes de domínio (o que significa que você precisa mudar para NVARCHAR
). Enquanto o padrão pode mudar nesse meio tempo (já faz um tempo desde que eu participei do jogo), estou bastante confiante de que, no momento, a maioria dos servidores no mundo não aceita endereços de email Unicode e tenho certeza muitos servidores terão problemas ao criar e / ou aceitar endereços com> 320 caracteres.
Dito isso, você pode se preparar para o pior agora, se quiser (e se estiver usando a compactação de dados no SQL Server 2008 R2 ou melhor, você se beneficiará da compactação Unicode, o que significa que você paga apenas a penalidade de 2 bytes pelos caracteres que realmente precisam isto). Dessa forma, você pode tornar sua coluna a largura que desejar e permitir que as pessoas coloquem lá o lixo que desejarem por muito tempo - elas não receberão um e-mail se lhe derem lixo da mesma maneira que não querem receber um email se a inserção falhar. O problema é se você deixar lixo inválida no, vocêtem que lidar com isso. E não importa o tamanho que você escolher - se alguém tentar inserir 400 caracteres em uma coluna de 320 caracteres, alguém tentará inserir 1025 caracteres em uma coluna de 1024 caracteres. Não há razão para que qualquer pessoa sensata tenha um endereço de e-mail com mais de 320 caracteres, a menos que esteja usando-o para testar explicitamente os limites do sistema.
Mas pare de pedir opiniões sobre isso - e pare de procurar outras implementações para obter orientação (neste caso, as que você referenciou não se deram ao trabalho de fazer sua própria lição de casa e apenas escolheram números de suas, bem, você sabe) . Você tem acesso direto ao padrão - consulte a versão mais atual, suporte-a no mínimo e fique por dentro do padrão para poder se adaptar às alterações nas especificações.
EDIT graças a @ypercube pelo ping no bate-papo.
Como um aparte, talvez você não queira despejar o endereço inteiro em uma única coluna em primeiro lugar. A normalização pode sugerir que você não deseja armazenar @hotmail.com
15 milhões de vezes quando um FK int muito mais fino funcionaria bem e não teria a sobrecarga adicional de colunas de comprimento variável. Você também pode normalizar o nome de usuário john.smith@hotmail.com
e john.smith@gmail.com
compartilhar um nome de usuário comum - eles não se conhecem, mas seu banco de dados não se importa com isso.
Eu falei sobre isso aqui:
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/
No entanto, isso apresenta desafios ao limite de 254 caracteres acima, pois não parece haver consenso sobre o que acontece quando um domínio válido de 255 caracteres é combinado com uma parte local válida de 1 caractere. Isso deve ser aceito pela maioria dos servidores em todo o mundo, mas parece violar esse limite de 254 caracteres. Então, você cria uma Domains
tabela que possui uma restrição artificialmente menor no tamanho dos endereços de email, quando o domínio pode ser reutilizado como um URL válido de 255 caracteres?