web-dev-qa-db-fra.com

Quelle doit être la durée des champs de messagerie SQL?

Je reconnais qu'une adresse e-mail peut essentiellement être indéfiniment longue, donc toute taille que j'impose à mon champ d'adresse e-mail varchar va être arbitraire. Cependant, je me demandais quel est le "standard"? Combien de temps les gars faites-vous? (même question pour le champ Nom ...)

pdate: Apparemment, la longueur maximale d'une adresse e-mail est de 320 (<= 64 partie du nom, <= 255 domaine). L'utilisez-vous?

85
Mala

La limite théorique est vraiment longue, mais avez-vous vraiment besoin de vous soucier de ces longues adresses e-mail? Si quelqu'un ne peut pas se connecter avec un e-mail de 100 caractères, vous en souciez-vous vraiment? Nous préférons en fait qu'ils ne le puissent pas.

Certaines données statistiques peuvent éclairer la question. Nous avons analysé une base de données avec plus de 10 millions d'adresses e-mail. Ces adresses ne sont pas confirmées, il y en a donc des invalides. Voici quelques faits intéressants,

  1. La plus longue validité est 89.
  2. Il y en a des centaines plus longs jusqu'à la limite de notre colonne (255) mais ils sont apparemment faux par inspection visuelle.
  3. Le pic de la distribution des longueurs est à 19.
  4. Il n'y a pas de longue queue. Tout tombe brusquement après 38.

Nous avons nettoyé la base de données en jetant quelque chose de plus de 40 ans. La bonne nouvelle est que personne ne s'est plaint, mais la mauvaise nouvelle est que peu de dossiers ont été nettoyés.

156
ZZ Coder

Dans le passé, je viens de faire 255 parce que c'est la norme enracinée d'entrée courte mais pas trop courte. Ça, et je suis une créature d'habitude.

Cependant, comme le maximum est 319, je ferais nvarchar(320) sur la colonne. Je dois me rappeler le @!

nvarchar n'utilisera pas l'espace dont vous n'avez pas besoin, donc si vous n'avez qu'une adresse e-mail de 20 caractères, cela ne prendra que 20 octets. Cela contraste avec un nchar qui toujours prendra son maximum (il remplit à droite la valeur avec des espaces).

J'utiliserais également nvarchar au lieu de varchar car c'est Unicode. Étant donné la volatilité des adresses e-mail, c'est certainement la voie à suivre.

16
Eric

L'adresse e-mail suivante ne contient que 94 caractères:

i.have.a.really.long.name.like.seetharam.krishnapillai@AReallyLongCompanyNameOfSomeKind.com.au

  • Une organisation vous donnerait-elle réellement un e-mail aussi long?
  • S'ils étaient assez stupides, voudriez-vous réellement utiliser une adresse e-mail comme celle-là?
  • Serait n'importe qui? Bien sûr que non. Trop long à taper et trop difficile à retenir.

Même un technophobe de 92 ans découvrirait comment s'inscrire pour une courte adresse gmail Nice, et l'utiliser simplement, plutôt que de taper cela dans votre page d'inscription.

L'espace disque n'est probablement pas un problème, mais il y a au moins deux problèmes à autoriser les champs de saisie utilisateur à être beaucoup plus longs que nécessaire:

  • Les afficher pourrait gâcher votre interface utilisateur (au mieux, ils seront coupés, au pire, ils pousseront vos conteneurs et vos marges)
  • 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)

J'aime 50 caractères:

[email protected]

Si un utilisateur sur un million doit utiliser son autre adresse e-mail pour utiliser mon application, qu'il en soit ainsi.

(Les statistiques montrent que personne ne saisit réellement plus de 40 caractères pour l'adresse e-mail, voir par exemple: la réponse de ZZ Coder https://stackoverflow.com/a/1297352/87861 )

8
MGOwen

Si vous êtes vraiment suspicion à ce sujet, créez un nom d'utilisateur varchar (60), domaine varchar (255). Ensuite, vous pouvez faire des statistiques ridicules sur l'utilisation du domaine qui sont légèrement plus rapides que de le faire en tant que champ unique. Si vous pensez vraiment à l'optimisation, cela rendra également votre serveur SMTP capable d'envoyer des e-mails avec moins de connexions/un meilleur traitement par lots.

4
Jeff Ferland

RFC 5321 (la spécification SMTP actuelle, obsolète RFC2821) déclare:

4.5.3.1.1. Partie locale

La longueur totale maximale d'un nom d'utilisateur ou d'une autre partie locale est de 64
octets.

4.5.3.1.2. Domaine

La longueur totale maximale d'un nom de domaine ou d'un numéro est de 255 octets.

Cela ne concerne que localpart @ domain, pour un total de 320 ASCII (7 bits) caractères.

Si vous envisagez de normaliser vos données, peut-être en divisant la partie locale et le domaine dans des champs séparés, d'autres éléments à garder à l'esprit:

  • Une technique connue sous le nom de VERP peut entraîner des pièces locales complètes pour le courrier généré automatiquement (peut ne pas être pertinent pour votre cas d'utilisation)
  • les domaines ne sont pas sensibles à la casse; recommander de mettre en minuscule la portion de domaine
  • les parties locales sont sensibles à la casse; [email protected] et [email protected] sont des adresses techniquement différentes selon les spécifications, bien que la politique de domain.com mai soit de traiter les deux adresses comme équivalentes. Il est préférable de limiter le pliage de cas localpart aux domaines connus pour ce faire.
3
Wez Furlong

Selon ce texte, basé sur les documents RFC appropriés, ce n'est pas 320 mais 254: http://www.eph.co.uk/resources/email-address-length-faq/

Edit: Utilisation de WayBack Machine: https://web.archive.org/web/20120222213813 /http://www.eph.co.uk/resources/email-address-length-faq/

Quelle est la longueur maximale d'une adresse e-mail?

254 caractères

Il semble y avoir une certaine confusion sur la taille maximale de l'adresse e-mail valide. La plupart des gens pensent qu'il s'agit de 320 caractères (64 caractères pour le nom d'utilisateur + 255 caractères pour le domaine + 1 caractère pour le symbole @). D'autres sources suggèrent 129 (64 + 1 + 64) ou 384 (128 + 1 + 255, en supposant que le nom d'utilisateur doublera de longueur à l'avenir).

Cette confusion signifie que vous devez tenir compte du "principe de robustesse" ("les développeurs doivent soigneusement écrire des logiciels qui adhèrent étroitement aux RFC existants mais accepter et analyser les entrées de leurs pairs qui pourraient ne pas être cohérentes avec ces RFC." - Wikipedia) lors de l'écriture de logiciels qui traitent de adresses mail. En outre, certains logiciels peuvent être paralysés par des hypothèses naïves, par exemple penser que 50 caractères est suffisant (exemples). Votre adresse e-mail de 200 caractères peut être techniquement valide, mais cela ne vous aidera pas si la plupart des sites Web ou des applications la rejettent.

La longueur maximale réelle des e-mails est actuellement de 254 caractères:

"La version originale de la RFC 3696 a effectivement dit que 320 était la longueur maximale, mais John Klensin (ICANN) a par la suite admis que c'était faux."

"Cela provient de l'arithmétique simple de la longueur maximale d'un domaine (255 caractères) + la longueur maximale d'une boîte aux lettres (64 caractères) + le symbole @ = 320 caractères. Faux. Ce canard est en fait documenté dans la version originale de RFC3696. Il a été corrigé dans l'errata. Il y a en fait une restriction de RFC5321 sur l'élément de chemin d'une transaction SMTP de 256 caractères. Mais cela inclut des crochets inclinés autour de l'adresse e-mail, donc la longueur maximale d'une adresse e-mail est de 254 caractères. " - Dominic Sayers

3
SasQ

J'utilise varchar (64) je ne pense pas que quiconque puisse avoir un email plus long

1
GibboK

Pour le courrier électronique, quelle que soit la spécification, je choisis pratiquement toujours 512 (nvarchar). Les noms et prénoms sont similaires.

Vraiment, vous devez regarder à quel point vous vous souciez d'avoir un peu de données supplémentaires. Pour moi, la plupart du temps, ce n'est pas un souci, donc je vais me tromper du côté conservateur. Mais si vous avez décidé, par des moyens logiques et précis, que vous aurez besoin de conserver de l'espace, faites-le. Mais en général, soyez prudent avec la taille des champs et la durée de vie sera bonne.

Notez que tous les clients de messagerie ne prennent probablement pas en charge le RFC, donc peu importe ce qu'il dit, vous pouvez rencontrer différentes choses dans la nature.

0
Noon Silk