Ich habe es immer benutzt VARCHAR(320)
. Hier ist der Grund. Der Standard schreibt die folgenden Einschränkungen vor:
- 64 Zeichen für den "lokalen Teil" (Benutzername).
- 1 Zeichen für das
@
Symbol.
- 255 Zeichen für den Domainnamen.
Nun werden einige Leute sagen, dass Sie mehr als das unterstützen müssen. Einige Leute werden auch sagen, dass Sie Unicode für Domain-Namen unterstützen müssen (was bedeutet, dass Sie wechseln müssen NVARCHAR
). Während sich der Standard in der Zwischenzeit möglicherweise geändert hat (es ist schon eine Weile her, seit ich Skin im Spiel hatte), bin ich ziemlich zuversichtlich, dass die meisten Server der Welt derzeit keine Unicode-E-Mail-Adressen akzeptieren, und ich bin mir sicher Bei vielen Servern treten Probleme beim Erstellen und / oder Akzeptieren von Adressen mit mehr als 320 Zeichen auf.
Das heißt, Sie können sich jetzt auf das Schlimmste vorbereiten, wenn Sie möchten (und wenn Sie Datenkomprimierung in SQL Server 2008 R2 oder höher verwenden, profitieren Sie von der Unicode-Komprimierung, dh Sie zahlen nur die 2-Byte-Strafe für Zeichen, die tatsächlich benötigt werden es). Auf diese Weise können Sie Ihre Spalte so breit machen, wie Sie möchten, und Sie können zulassen, dass die Leute allzu viel Müll hineinstecken. Sie erhalten keine E-Mail, wenn sie Ihnen Müll geben, so wie sie es nicht tun Erhalten Sie eine E-Mail, wenn die Einfügung fehlschlägt. Das Problem ist, wenn Sie ungültigen Müll reinlassen, Siedamit umgehen müssen. Und egal wie groß Sie es machen - wenn jemand versucht, 400 Zeichen in eine 320-Zeichen-Spalte zu schreiben, versucht jemand, 1025 Zeichen in eine 1024-Zeichen-Spalte zu schreiben. Es gibt keinen Grund, warum eine vernünftige Person eine E-Mail-Adresse mit mehr als 320 Zeichen haben sollte, es sei denn, sie verwendet sie zum expliziten Testen von Systemgrenzen.
Aber hören Sie auf, nach Meinungen dazu zu fragen - und schauen Sie nicht mehr nach anderen Implementierungen, um sich eine Orientierung zu verschaffen (in diesem Fall haben sich die von Ihnen angesprochenen nicht die Mühe gemacht, ihre eigenen Hausaufgaben zu machen, und haben nur Zahlen aus ihren herausgesucht. . Sie haben direkten Zugriff auf den Standard. Stellen Sie sicher, dass Sie die aktuellste Version konsultieren, diese mindestens unterstützen und stets auf dem neuesten Stand sind, damit Sie sich an Änderungen der Spezifikationen anpassen können.
EDIT danke an @ypercube für den Ping im Chat.
Abgesehen davon möchten Sie vielleicht gar nicht erst die gesamte Adresse in eine einzelne Spalte schreiben. Die Normalisierung könnte darauf hindeuten, dass Sie nicht @hotmail.com
15 Millionen Mal speichern möchten, wenn ein viel dünneres FK int gut funktioniert und nicht den zusätzlichen Overhead von Spalten variabler Länge hat. Sie können den Benutzernamen auch normalisieren john.smith@hotmail.com
und john.smith@gmail.com
einen gemeinsamen Benutzernamen verwenden - sie kennen sich nicht, aber Ihre Datenbank kümmert sich nicht darum.
Ich habe hier über einiges davon gesprochen:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/sql-server-part-2/
Dies führt jedoch zu Problemen mit der obigen Beschränkung von 254 Zeichen, da offenbar kein Konsens darüber besteht, was passiert, wenn eine gültige Domäne mit 255 Zeichen mit einem gültigen lokalen Teil mit 1 Zeichen kombiniert wird. Dies sollte von den meisten Servern auf der Welt akzeptiert werden, scheint jedoch diese Beschränkung von 254 Zeichen zu verletzen. Erstellen Sie also eine Domains
Tabelle mit einer künstlich geringeren Längenbeschränkung für E-Mail-Adressen, wenn die Domain als gültige URL mit 255 Zeichen wiederverwendet werden könnte ?