Combien de temps faut-il pour les champs de messagerie SQL?

Je reconnais qu’une adresse e-mail peut durer indéfiniment, de sorte que toute taille imposée à mon champ d’adresse e-mail varchar sera arbitraire. Cependant, je me demandais quelle est la “norme”? Combien de temps vous y prenez-vous? (même question pour le champ Nom …)

update: Apparemment, la longueur maximale d’une adresse e-mail est 320 (<= 64 nom de partie, <= 255 domaine). Est-ce que vous l'utilisez?

La limite théorique est très longue mais avez-vous vraiment besoin de vous soucier de ces longues adresses email? Si quelqu’un ne peut pas se connecter avec un courrier électronique de 100 caractères, ça vous intéresse vraiment? Nous préférons réellement qu’ils ne peuvent pas.

Certaines données statistiques peuvent éclairer la question. Nous avons analysé une firebase database avec plus de 10 millions d’adresses électroniques. Ces adresses ne sont pas confirmées, il y a donc des adresses non valides. Voici quelques faits intéressants,

  1. Le plus long valide est 89.
  2. Il y en a des centaines plus longues à la limite de notre colonne (255) mais elles sont apparemment fausses par inspection visuelle.
  3. Le pic de la dissortingbution de longueur est à 19.
  4. Il n’y a pas de longue queue. Tout tombe brusquement après 38 ans.

Nous avons nettoyé la firebase database en jetant quelque chose de plus que 40. La bonne nouvelle est que personne ne s’est plaint, mais la mauvaise nouvelle est que peu de dossiers ont été nettoyés.

Dans le passé, je viens juste de faire 255 parce que c’est la norme si bien ancrée de la consortingbution courte mais pas trop courte. Ça, et je suis une créature d’habitude.

Cependant, puisque le max est 319, je ferais nvarchar(320) sur la colonne. Je dois me souvenir du @ !

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. Ceci est en contraste avec un nchar qui prendra toujours son maximum (il nchar la valeur avec des espaces).

J’utiliserais aussi nvarchar au lieu de varchar puisque c’est Unicode. Compte tenu de la volatilité des adresses e-mail, c’est certainement la voie à suivre.

L’adresse électronique suivante n’a que 94 caractères:

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

  • Une organisation vous donnerait -elle un email aussi long?
  • S’ils étaient assez stupides, utiliseriez-vous une adresse électronique comme celle-là?
  • Quelqu’un voudrait -il? Bien sûr que non. Trop long pour taper et trop difficile à retenir.

Même un technophobe de 92 ans trouverait comment s’inscrire pour une adresse gmail courte et agréable, et il suffit de l’utiliser, plutôt que de taper ceci dans votre page d’inscription.

L’espace disque n’est probablement pas un problème, mais il y a au moins deux problèmes pour permettre aux champs de saisie utilisateur d’être beaucoup plus longs que nécessaire:

  • Leur affichage 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 lesquelles vous ne pouvez pas anticiper (comme les cas où les pirates informatiques utilisaient une API en ligne gratuite pour stocker un tas de données)

J’aime 50 caractères:

123456789.123456789.123456789@1234567890123456.com

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

(Les statistiques montrent que personne n’entre plus d’environ 40 caractères pour l’adresse électronique, voir par exemple la réponse de ZZ Coder https://stackoverflow.com/a/1297352/87861 )

Si vous êtes vraiment suspendu, faites un nom d’utilisateur varchar (60), domaine varchar (255). Ensuite, vous pouvez faire des statistiques ridicules sur l’utilisation du domaine qui est légèrement plus rapide que de le faire en tant que champ unique. Si vous vous sentez vraiment ennuyeux en matière d’optimisation, votre serveur SMTP pourra également envoyer des e-mails avec moins de connexions / un meilleur traitement par lot.

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

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 caractères ASCII (7 bits).

Si vous envisagez de normaliser vos données, peut-être en divisant la partie locale et le domaine en champs distincts, d’autres points à garder à l’esprit:

  • Une technique appelée VERP peut générer des parties locales complètes pour le courrier généré automatiquement (peut ne pas être pertinent pour votre cas d’utilisation)
  • les domaines sont insensibles à la casse; recommande de réduire la partie de domaine en minuscule
  • localparts sont sensibles à la casse; user@domain.com et USER@domain.com sont des adresses techniquement différentes selon les spécifications, bien que la politique sur domain.com puisse être de traiter les deux adresses comme équivalentes. Il est préférable de restreindre le pliage local du cas aux domaines connus.

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 : Using 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 électronique 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 double dans le futur).

Cette confusion signifie que vous devez tenir compte du «principe de robustesse» («les développeurs doivent écrire soigneusement des logiciels qui adhèrent étroitement aux RFC existants, mais acceptent et parsingnt les commentaires de leurs homologues non compatibles avec ces RFC»). adresses mail. En outre, certains logiciels peuvent être paralysés par des hypothèses naïves, par exemple en pensant que 50 caractères sont adéquats (exemples). Votre adresse électronique de 200 caractères peut être techniquement valide, mais cela ne vous aidera pas si la plupart des sites Web ou des applications le rejettent.

La longueur maximale réelle du courrier électronique est actuellement de 254 caractères:

“La version originale de la RFC 3696 indiquait en effet que 320 était la longueur maximale, mais John Klensin (ICANN) a par la suite accepté que c’était faux.”

“Cela provient de l’arithmétique simple de la longueur maximale d’un domaine (255 caractères) + longueur maximale d’une boîte aux lettres (64 caractères) + du symbole @ = 320 caractères. Mauvais. Ce canard est actuellement documenté dans la version originale de RFC3696. a été corrigée dans les errata. Il y a en fait une ressortingction de RFC5321 sur l’élément de cheminement d’une transaction SMTP de 256 caractères, mais cela inclut les parenthèses inclinées autour de l’adresse électronique, ainsi la longueur maximale d’une adresse email est de 254 caractères. ” – Dominic Sayers

J’utilise varchar (64) je ne pense pas que quiconque pourrait avoir plus long email

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

En fait, vous devez examiner à quel point vous avez besoin de quelques données supplémentaires. Pour moi, la plupart du temps, ce n’est pas un souci, alors je vais pécher par excès de prudence. Mais si vous avez décidé, par des moyens logiques et précis, d’économiser de l’espace, faites-le. Mais en général, soyez prudent avec la taille des champs, et la vie sera bonne.

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