Quelle est la longueur optimale pour une adresse e-mail dans une base de données?

Voici une partie extraite de ma requête, reflétant le type de données de la colonne EMAIL_ADDRESS et la propriété:

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

Toutefois, John Saunders utilise VARYING(256) .

cela me suggère que je n'ai pas nécessairement compris la variation correctement.

je le comprends tel que la longueur d'une adresse e-mail est de 20 caractères dans mon cas, tandis que 256 pour Jodn.

Contexte dans le code 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)
  );

Je n'ai jamais vu des adresses email plus de 20 caractères, utilisés par des gens ordinaires.

Quelle est la longueur optimale pour une adresse e-mail dans une base de données?

73
demandé sur nyedidikeke 2009-07-29 14:10:43

8 réponses

la longueur maximale d'une adresse courriel est de 254 caractères.

chaque adresse e-mail est composée de deux parties. La partie locale qui précède le signe " @ " et la partie du domaine qui le suit. "User@example.com", la partie locale est "user", et le nom de domaine est "example.com".

la partie locale ne doit pas dépasser 64 caractères et la partie domaine ne doit pas dépasser 255 caractères.

La longueur combinée de les parties locales du domaine + @ + d'une adresse e-mail ne doivent pas dépasser 254 caractères. Comme décrit dans RFC3696 Errata ID 1690 .

j'ai la partie originale de cette information d'ici

115
répondu Iain Hoult 2014-05-07 15:55:21

à partir de Demander Metafilter :

Mes données proviennent d'une base de données de 323 adresse. La distribution a quelques valeurs aberrantes supérieures (positivement asymétrique -). Il est normalement distribué sans l'valeurs aberrantes (je tester.)

Min: 12 1er quartile: 19 moyenne (w/ valeurs aberrantes): 23.04 moyenne w / o valeurs aberrantes): 22.79 3e quartile: 26 Max (W / valeurs aberrantes): 47 Max( w / o valeurs aberrantes): 35

Médiane: 23 Mode: 24 Std. Dev (w/ valeurs aberrantes): 5.20 Std. Dev (w /o valeurs aberrantes): 4,70

plages basées sur les données suivantes: les valeurs aberrantes 68,2% des données 17,8-28,2 95,4% des données 12,6-33,4 99,7% des données 7.4 - 38.6

fourchettes fondées sur les valeurs aberrantes exclues 68.2% des données 18.1 - 27.5 95,4% des données 13.4 - 32.2 99,7% des données de 8,7 - 36.9

Si vous vous inscrivez pour http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com / alors votre adresse email serait sûrement une valeur aberrante:)

Voici qu'est-Ce que la sécurité maximale de la longueur d'une adresse e-mail afin de permettre à un formulaire sur le site? sur Raycon avec une moyenne légèrement différente (N=50 496, moyenne = 23):

Email address length distribution

52
répondu pageman 2017-04-27 05:34:51

mon adresse email de travail est plus de 20 caractères!

Lire spécification RFC :

"Le local-la partie d'une adresse e-mail peut-être jusqu'à 64 caractères et le nom de domaine peut avoir un maximum de 255 caractères "

17
répondu Dan Diplo 2009-07-29 10:16:18

il suffit d'utiliser varchar(50) . Les e-mails plus longs sont nuls, à chaque fois.

il suffit de regarder la longueur 50 chars est:

peoplewithanemail@ddressthislongjustuseashorterone

si vous autorisez les e-mails de 255 caractères:

  • les Afficher peut gâcher votre UI (au mieux ils seront coupés, au pire ils poussent vos conteneurs et marges autour) et
  • Les utilisateurs malveillants peuvent faire des choses avec eux que vous ne pouvez pas anticiper (comme les cas où les pirates ont utilisé une API en ligne gratuite pour stocker un tas de données)

(les statistiques montrent que personne n'entre réellement plus d'environ 50 caractères pour une adresse email légitime, voir par exemple: réponse de pageman https://stackoverflow.com/a/1199245/87861 )

13
répondu Nicolas Manzini 2018-06-07 07:46:04

comme d'autres l'ont dit, bien plus grand que 20. 256 + 64 sonne bien pour moi, et est conforme RFC.

la seule raison de ne pas avoir une si grande valeur pour votre base de données est si vous vous inquiétez de la performance ou de l'espace, et si vous faites cela, alors je suis sûr à 99.999999999999% que c'est optimisation prématurée .

Allez-y en grand.

2
répondu Stu Thompson 2009-07-29 10:27:08

les types de caractères variables dans les bases de données n'occupent pas d'espace inutile. Il n'y a donc aucune raison de limiter autant que possible ces domaines. Selon le nom d'une personne, le schéma d'appellation utilisé par son organisation et son nom de domaine, une adresse peut facilement dépasser 20 caractères.

il n'y a pas de limite quant à la longueur de la partie locale et du nom de domaine dans RFC-2822 . RFC-2181 limite le nom de domaine à 255 les octets / caractères cependant.

encore une fois, depuis un varchar utilise seulement l'espace réellement utilisé par la chaîne que vous stockez, il n'y a aucune raison d'avoir une petite limite pour la longueur d'adresse email. Prends la 512 et arrête de t'inquiéter. Tout le reste est optimisation prématurée

2
répondu VoidPointer 2009-07-29 10:35:00

initialement, le maximum est de 320 caractères (64+1+255, comme le montrent d'autres réponses) mais comme RFC 3696 Errata 1003 said:

cependant, il y a une restriction dans la RFC 2821 sur la longueur d'un adresse dans les commandes MAIL et RCPT de 256 caractères. Depuis les adresses qui ne s'inscrivent pas dans ces domaines ne sont pas normalement utiles, le haut la limite de longueur des adresses devrait normalement être considérée comme étant de 256.

et de RFC 5321 section 4.5.3.1.3 :

4.5.3.1.3. Chemin

la longueur totale maximale d'une marche arrière ou d'une marche avant est de 256 ouvrages (y compris les séparateurs de ponctuation et d'éléments)

Cela inclut les crochets d'ouverture et de fermeture de sorte qu'il nous a permis de seulement 254 octets de l'adresse e-mail.

mais gardez à l'esprit que le nombre d'octets peut ne pas être égal au nombre de caractères (un caractère peut avoir 2 octets ou plus). Aussi le RFC section 4.5.3.1 dire qu'il peut y avoir des champs de plus que le maximum et cela est possible mais pas garanti aux serveurs pour les attraper correctement.

Et ensuite, vous pouvez/devez utiliser un VARCHAR(254) pour stocker une adresse e-mail.

Note: dans MySQL au moins, une colonne déclaré comme VARCHAR whit inférieur ou égal à 255 octets seront tous stockés comme 1 byte + length (le 1 est de stocker la longueur) de sorte qu'aucun espace n'est gagné si utilisé une limite inférieure.

2
répondu PhoneixS 2014-05-08 07:05:23

un champ CHAR(20) prendra toujours 20 caractères, que vous l'utilisiez ou non. (Souvent rembourré avec des espaces à l'extrémité.) Un champ VARCHAR(20) prendra jusqu'à 20 caractères, mais peut prendre moins. Un des avantages de CHAR()s largeur constante est rapide saut d'une ligne dans une table, vous pouvez calculer l'indice qu'il doit être. L'inconvénient est de gaspiller de l'espace.

le bénéfice de CHAR(x) de taille constante est perdu si vous avez une Colonnes de VARCHAR (x) dans votre tableau. Il me semble me rappeler que MySQL a converti en silence tous les champs de CHAR () en VARCHAR()dans les coulisses si certaines colonnes étaient VARCHAR () s.

0
répondu 2009-07-29 10:38:55