Qual é a duração ideal para um endereço de email em um database?

Aqui está uma parte extraída da minha consulta, refletindo o tipo e a propriedade de dados da coluna EMAIL_ADDRESS :

 EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

No entanto, John Saunders usa VARYING(256) .

Isso me sugere que eu não necessariamente entendi a VARIAÇÃO corretamente.

Eu entendo de tal forma que o comprimento de um endereço de e-mail é de 20 caracteres no meu caso, enquanto 256 para Jodn.

Contexto no código de John

 CREATE TABLE so."User" ( USER_ID SERIAL NOT NULL, USER_NAME CHARACTER VARYING(50) NOT NULL, EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here HASHED_PASSWORD so.HashedPassword NOT NULL, OPEN_ID CHARACTER VARYING(512), A_MODERATOR BOOLEAN, LOGGED_IN BOOLEAN, HAS_BEEN_SENT_A_MODERATOR_MESSAGE BOOLEAN, CONSTRAINT User_PK PRIMARY KEY(USER_ID) ); 

Eu nunca vi endereços de e-mail com mais de 20 caracteres, usados ​​por pessoas comuns.

Qual é a duração ideal para um endereço de email em um database?

    O comprimento máximo de um endereço de email é de 254 caracteres.

    Cada endereço de email é composto de duas partes. A parte local que vem antes do sinal ‘@’ e a parte do domínio que a segue. Em “user@example.com”, a parte local é “user” e a parte do domínio é “example.com”.

    A parte local não deve exceder 64 caracteres e a parte do domínio não pode ter mais de 255 caracteres.

    O comprimento combinado das partes do domínio local + @ + de um endereço de e-mail não deve exceder 254 caracteres. Conforme descrito em RFC3696 Errata ID 1690 .

    Eu tenho a parte original desta informação daqui

    da Ask Metafilter :

    Meus dados vêm de um database de 323 endereços. A distribuição tem alguns outliers superiores (positivamente distorcidos). Normalmente é distribuído sem os outliers (testei).

    Mínimo: 12 1º quartil: 19 Média (p / outliers): 23,04 Média s / out (outliers): 22,79 3º quartil: 26 Máx. (P / out): 47 Máx. (S / out): 35

    Mediana: 23 Modo: 24 Std. Dev (w / outliers): 5.20 Std. Dev (sem outliers): 4.70

    Intervalos baseados em dados incluindo outliers 68,2% dos dados 17,8 – 28,2 95,4% dos dados 12,6 – 33,4 99,7% dos dados 7,4 – 38,6

    Os intervalos baseados em dados outliers excluíram 68,2% dos dados 18,1 – 27,5 95,4% dos dados 13,4 – 32,2 99,7% dos dados 8,7 – 36,9

    Se você se inscrever no http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ , seu endereço de e-mail certamente será um caso discrepante 🙂

    Qual é o tamanho máximo seguro de um endereço de e-mail para permitir em um formulário de site? no Raycon com uma média ligeiramente diferente (N = 50.496, média = 23):

    Distribuição do comprimento do endereço de email

    Meu endereço de e-mail do trabalho tem mais de 20 caracteres!

    Leia a especificação RFC apropriada:

    “A parte local de um endereço de e-mail pode ter até 64 caracteres e o nome do domínio pode ter no máximo 255 caracteres”

    Apenas use varchar(50) . E-mails mais longos são uma porcaria, toda vez.

    Basta olhar quanto tempo 50 caracteres é:

    as pessoas com o email @ ddressthislongjustuseashorterone

    Se você permitir e-mails de 255 caracteres:

    • Exibi-los pode atrapalhar a sua interface do usuário (na melhor das hipóteses eles serão cortados, na pior das hipóteses eles empurram seus contêineres e margens) e
    • Os usuários mal-intencionados podem fazer coisas com eles que você não pode prever (como nos casos em que os hackers usaram uma API on-line gratuita para armazenar vários dados)

    (As statistics mostram que ninguém, na verdade, insere mais de 50 caracteres para um endereço de e-mail legítimo, ver, por exemplo: resposta do pageman https://stackoverflow.com/a/1199245/87861 )

    Como outros já disseram, bem maior que 20. 256 + 64 parece bom para mim e é compatível com RFC.

    A única razão para não ter um valor tão grande para o seu database é se você está preocupado com desempenho ou espaço, e se você está fazendo isso, então eu estou 99.99999999999999% de certeza de que é a otimização prematura .

    Cresça.

    Tipos de caracteres variables ​​em bancos de dados não ocupam espaço desnecessário. Assim, não há razão para restringir tais campos tanto quanto possível. Dependendo do nome de uma pessoa, o esquema de nomes usado por sua organização e seu nome de domínio, um endereço pode facilmente exceder 20 caracteres.

    Não há limite quanto ao comprimento de local-part e domain-name no RFC-2822 . RFC-2181 limita o nome de domínio para 255 octetos / caracteres embora.

    Novamente, como um varchar usa apenas o espaço realmente usado pela string armazenada, não há motivo para ter um pequeno limite para o tamanho do endereço de email. Basta ir com 512 e parar de se preocupar. Tudo o resto é otimização prematura

    Inicialmente, o máximo é de 320 caracteres (64 + 1 + 255, como mostrado em outras respostas), mas como a RFC 3696 Errata 1003 disse:

    No entanto, há uma restrição no RFC 2821 no comprimento de um endereço em comandos MAIL e RCPT de 256 caracteres. Como os endereços que não se encheckboxm nesses campos normalmente não são úteis, o limite superior de comprimentos de endereço deve normalmente ser considerado como 256.

    E do RFC 5321 seção 4.5.3.1.3 :

    4.5.3.1.3. Caminho

    O comprimento total máximo de um caminho inverso ou avançado é de 256 octetos (incluindo os separadores de pontuação e de elemento)

    Isso inclui os colchetes de abertura e fechamento, de modo que nos permite apenas 254 octetos de endereço de e-mail.

    Mas tenha em mente que o número de octetos pode não ser igual ao número de caracteres (um char pode ter 2 ou mais octetos). Também a seção RFC 4.5.3.1 diz que pode haver campos de mais que o máximo e isso é possível mas não garantido aos servidores para captá- los corretamente.

    E então você pode / deve usar um VARCHAR(254) para armazenar um endereço de e-mail.

    Nota: No MySQL, pelo menos, uma coluna declarada como VARCHAR com menos ou igual a 255 octetos será armazenada como 1 byte + length (o 1 é para armazenar o comprimento), portanto, nenhum espaço será ganho se for usado um limite inferior.

    Um campo CHAR (20) sempre ocupará 20 caracteres, quer você use tudo ou não. (Geralmente preenchido com espaços no final.) Um campo VARCHAR (20) ocupará até 20 caracteres, mas pode ocupar menos. Um benefício da largura constante de CHAR () s é o salto rápido para uma linha em uma tabela, porque você pode simplesmente calcular o índice em que deve estar. A desvantagem é perder espaço.

    O benefício de CHAR (x) ‘s de tamanho constante é perdido se você tiver qualquer coluna VARCHAR (x) em sua tabela. Eu pareço lembrar que o MySQL silenciosamente converteu qualquer campo CHAR () em VARCHAR () nos bastidores, se algumas colunas fossem VARCHAR () s.