Aqui está uma parte extraída da minha consulta, refletindo o EMAIL_ADDRESS
tipo de dados da coluna e a propriedade:
EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,
No entanto, John Saunders usa VARYING(256)
.
Isso me sugere que não entendi necessariamente a VARIAÇÃO corretamente.
Eu entendo que o comprimento de um endereço de e-mail é de 20 caracteres no meu caso, enquanto no caso de Jodn 256 caracteres.
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)
);
Nunca vi endereços de e-mail com mais de 20 caracteres, usados por pessoas comuns.
Qual é o comprimento ideal para um endereço de e-mail em um banco de dados?
database
performance
email
database-design
Léo Léopold Hertz 준영
fonte
fonte
Respostas:
O comprimento máximo de um endereço de e-mail é 254 caracteres.
Cada endereço de e-mail é composto de duas partes. A parte local que vem antes do sinal '@' e a parte do domínio que o segue. Em "usuá[email protected]", a parte local é "usuário" e a parte do domínio é "exemplo.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 locais + @ + do domínio de um endereço de e-mail não deve exceder 254 caracteres. Conforme descrito em RFC3696 Errata ID 1690 .
Eu peguei a parte original desta informação daqui
fonte
de Ask Metafilter :
Se você se inscrever em http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ , seu endereço de e-mail certamente seria um outlier :)
Aqui está Qual é a duração máxima de segurança de um endereço de e-mail para permitir de forma website? no Raycon com uma média ligeiramente diferente (N = 50.496, média = 23):
fonte
Basta usar
varchar(50)
. E-mails mais longos são uma porcaria, sempre.Basta olhar quanto tempo 50 caracteres são:
peoplewithanemail @ ddressthislongjustuseashorterone
Se você permitir e-mails de 255 caracteres:
(As estatísticas mostram que ninguém realmente insere mais do que cerca de 50 caracteres para um endereço de e-mail legítimo, consulte, por exemplo: a resposta do pageman https://stackoverflow.com/a/1199245/87861 )
fonte
Meu endereço de e-mail comercial tem mais de 20 caracteres!
Leia a especificação RFC apropriada :
fonte
Os tipos de caracteres variáveis em bancos de dados não ocupam espaço desnecessário. Portanto, não há razão para restringir esses campos tanto quanto possível. Dependendo do nome de uma pessoa, do esquema de nomenclatura usado por sua organização e de seu nome de domínio, um endereço pode facilmente exceder 20 caracteres.
Não há limite para o comprimento da parte local e do nome de domínio no RFC-2822 . A RFC-2181 limita o nome de domínio a 255 octetos / caracteres.
Novamente, como um varchar usa apenas o espaço realmente usado pela string que você armazena, não há razão para ter um pequeno limite para o comprimento do endereço de e-mail. Basta ir com 512 e parar de se preocupar. Todo o resto é otimização prematura
fonte
Inicialmente, o máximo é de 320 caracteres (64 + 1 + 255, como mostrado em outras respostas), mas como RFC 3696 Errata 1003 disse:
E da RFC 5321 seção 4.5.3.1.3 :
Isso inclui os colchetes de abertura e fechamento, de modo que nos permita apenas 254 octetos de endereço de e-mail.
Mas lembre-se de que o número de octetos pode não ser igual ao número de caracteres (um caractere pode ter 2 ou mais octetos). Também a seção RFC 4.5.3.1 informa que pode haver campos de mais do que o máximo e isso é possível, mas não garantido aos servidores para capturá-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
VARCHAR
com menor ou igual a 255 octetos será toda armazenada como1 byte + length
(o 1 é para armazenar o comprimento), portanto, nenhum espaço é ganho se for usado um limite inferior.fonte
Como outros já disseram, muito maior do 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 banco de dados é se você está se preocupando com desempenho ou espaço e, se estiver fazendo isso, tenho 99,999999999999999% de certeza de que é uma otimização prematura .
Cresça.
fonte
Um campo CHAR (20) sempre ocupará 20 caracteres, quer você use todos ou não. (Muitas vezes preenchido com espaços no fim.) Um VARCHAR (20) campo vai ocupar até 20 caracteres, mas pode levar até menos. Um benefício da largura constante de CHAR () é o salto rápido para uma linha em uma tabela, porque você pode simplesmente calcular o índice em que ela deve estar. A desvantagem é perder espaço.
O benefício de CHAR (x) de tamanho constante é perdido se você tiver qualquer coluna VARCHAR (x) em sua tabela. Parece que me lembro que o MySQL silenciosamente converteu quaisquer campos CHAR () em VARCHAR () nos bastidores se algumas colunas fossem VARCHAR () s.
fonte