J'ai toujours utilisé VARCHAR(320)
. Voici pourquoi. La norme dicte les limitations suivantes:
- 64 caractères pour la "partie locale" (nom d'utilisateur).
- 1 caractère pour le
@
symbole.
- 255 caractères pour le nom de domaine.
Maintenant, certaines personnes diront que vous devez soutenir davantage que cela. Certaines personnes diront également que vous devez prendre en charge Unicode pour les noms de domaine (ce qui signifie que vous devez basculer vers NVARCHAR
). Bien que la norme puisse changer entre-temps (cela fait un moment que je n'ai plus de skin dans le jeu), je suis assez confiant pour le moment. La plupart des serveurs dans le monde n'accepteront pas les adresses de messagerie Unicode. de nombreux serveurs auront des problèmes pour créer et / ou accepter des adresses avec plus de 320 caractères.
Cela dit, vous pouvez vous préparer au pire maintenant (et si vous utilisez la compression de données dans SQL Server 2008 R2 ou une version supérieure, vous bénéficierez de la compression Unicode, ce qui signifie que vous ne payez que la pénalité de 2 octets pour les caractères qui en ont réellement besoin. il). De cette façon, vous pouvez créer une colonne aussi large que vous le souhaitez et laisser les gens y insérer les fichiers inutiles: ils ne recevront pas d'e-mail s'ils vous envoient des messages tout comme ils ne le feront pas. recevoir un e-mail si l'insertion échoue. Le problème, c’est que si vous laissiez entrer des fichiers non valides, vousavoir à faire avec. Et quelle que soit la taille de votre choix - si quelqu'un essaie de placer 400 caractères dans une colonne de 320 caractères, il essaiera de placer 1025 caractères dans une colonne de 1024 caractères. Il n’ya aucune raison pour que toute personne sensée ait une adresse électronique> 320 caractères à moins de l’utiliser pour tester explicitement les limites du système.
Mais arrêtez de demander des avis à ce sujet - et arrêtez de regarder les autres implémentations pour vous guider (il se trouve que dans ce cas, celles que vous avez mentionnées ne se donnaient pas la peine de faire leurs propres devoirs et choisissaient juste des chiffres, eh bien, vous savez) . Vous avez un accès direct à la norme - veillez à consulter la version la plus récente, à la gérer au minimum, et à rester au-dessus de la norme pour pouvoir vous adapter aux modifications de spécifications.
EDIT grâce à @ypercube pour le ping en chat.
En passant, vous ne voulez peut-être pas vider toute l'adresse dans une seule colonne. La normalisation peut laisser penser que vous ne voulez pas stocker @hotmail.com
15 millions de fois lorsqu'un FK int beaucoup plus maigre fonctionnerait très bien sans les frais généraux supplémentaires des colonnes de longueur variable. Vous pouvez également normaliser le nom d'utilisateur, john.smith@hotmail.com
et john.smith@gmail.com
partager un nom d'utilisateur commun - ils ne se connaissent pas, mais votre base de données s'en fiche.
J'ai parlé de certaines de ces choses ici:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/
Cela introduit toutefois des défis à la limite de 254 caractères ci-dessus, car il ne semble pas y avoir de consensus sur ce qui se produit lorsqu'un domaine valide de 255 caractères est combiné à une partie locale valide à 1 caractère. Cela devrait être accepté par la plupart des serveurs du monde entier mais semble violer cette limite de 254 caractères. Alors, créez-vous une Domains
table dont la longueur des adresses de messagerie est restreinte artificiellement, lorsque le domaine peut être réutilisé en tant qu'URL valide de 255 caractères?