Was ist die optimale Länge für eine E-Mail-Adresse in einer Datenbank?


91

Hier ist ein extrahierter Teil meiner Abfrage, der den EMAIL_ADDRESSSpaltendatentyp und die Eigenschaft widerspiegelt :

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

Doch John Saunders verwendet VARYING(256).

Dies deutet darauf hin, dass ich die VARYING nicht unbedingt richtig verstanden habe.

Ich verstehe es so, dass die Länge einer E-Mail-Adresse in meinem Fall 20 Zeichen beträgt, während Jodn 256 Zeichen hat.

Kontext in Johns Code

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)
  );

Ich habe noch nie E-Mail-Adressen gesehen, die länger als 20 Zeichen sind und von normalen Menschen verwendet werden.

Was ist die optimale Länge für eine E-Mail-Adresse in einer Datenbank?


Was meinst du mit "optimal"? Was versuchst du zu "optimieren"?
S.Lott

1
@ S.Lott: Ich möchte ein sicheres System aufbauen. Die Zunahme der Benutzereingaben erhöht das Risiko, dass sie Codes in der Datenbank ausführen können. --- Ich sehe optimal als den besten Weg, um ein sicheres System zu haben.
Léo Léopold Hertz 준영

1
Nun, obwohl es Sicherheitsüberlegungen gibt, etwas nicht unbegrenzt zu machen, ist es immer am sinnvollsten, sich an die Standards zu halten. Wenn Sie dem folgen, was "häufig" oder "optimal" ist, werden wahrscheinlich Sicherheitsprobleme auftreten und diese dann reduziert.
Kitson

1
Diese Frage auf StackOverflow legt nahe, dass die maximale Länge jetzt 254 Zeichen beträgt, einschließlich des "@" -Zeichens: stackoverflow.com/questions/386294/…
dthrasher

1
Hier ist ein verwandter Beitrag über die E-Mail-Länge von @DominicSayers mit einer wirklich gründlichen Antwort: stackoverflow.com/a/574698/361842
JohnLBevan

Antworten:


131

Die maximale Länge einer E-Mail-Adresse beträgt 254 Zeichen.

Jede E-Mail-Adresse besteht aus zwei Teilen. Der lokale Teil, der vor dem '@'-Zeichen steht, und der darauf folgende Domain-Teil. In "user@example.com" ist der lokale Teil "user" und der Domain-Teil "example.com".

Der lokale Teil darf 64 Zeichen nicht überschreiten und der Domänenteil darf nicht länger als 255 Zeichen sein.

Die kombinierte Länge der lokalen + @ + Domain-Teile einer E-Mail-Adresse darf 254 Zeichen nicht überschreiten. Wie in RFC3696 Errata ID 1690 beschrieben .

Ich habe den Originalteil dieser Informationen von hier erhalten


Es scheint, dass es am besten ist, 320 als Länge zu nehmen.
Léo Léopold Hertz 29

40
Ich weiß, dass dies ein alter Thread ist und es kein Problem gibt, 320 zu verwenden, aber das tatsächliche Maximum ist 254, da eine übergeordnete Einschränkung von RFC2821 zusätzliche Einschränkungen auferlegt, die über die für die lokalen und Domänenbereiche angegebenen hinausgehen. Wenn Speicherplatz ein Problem darstellt, sollten Benutzer wissen, ob sie auf diesen Thread stoßen. Siehe Errata ID 1690 in Errata zu RFC3696
HexAndBugs

Wie @flightplanner sagte, fasst Wikipedia diese Abschnitte hier zusammen : "Aber das Maximum ... beschränkt die gesamte E-Mail-Adresse auf nicht mehr als 254 Zeichen"
RustyTheBoyRobot

2
Insbesondere, wenn das E-Mail-Feld eine eindeutige Einschränkung aufweisen soll. unter INNODB und utf8 ist varchar (254) klein genug (weniger als 767 Byte), um eine eindeutige Einschränkung zu haben, und varchar (300) ist dies nicht.
Autonomie

In der RFC 3696-Errata-ID 1003 wurde festgestellt, dass 256 Zeichen die praktische Grenze sind (und 320 Zeichen das Maximum).
Arnold Schrijver

56

von Ask Metafilter :

Meine Daten stammen aus einer Datenbank mit 323 Adressen. Die Verteilung hat einige Ausreißer am oberen Ende (positiv verzerrt). Es wird normalerweise ohne die Ausreißer verteilt (ich habe es getestet.)

Min: 12 1. Quartil: 19 Mittelwert (ohne Ausreißer): 23,04 Mittelwert ohne Ausreißer): 22,79 3. Quartil: 26 Max (ohne Ausreißer): 47 Max (ohne Ausreißer): 35

Median: 23 Modus: 24 Std. Dev (mit Ausreißern): 5,20 Std. Dev (ohne Ausreißer): 4,70

Bereiche basierend auf Daten einschließlich Ausreißern 68,2% der Daten 17,8 - 28,2 95,4% der Daten 12,6 - 33,4 99,7% der Daten 7,4 - 38,6

Bereiche, die auf Datenausreißern basieren, schlossen 68,2% der Daten aus. 18,1 - 27,5 95,4% der Daten 13,4 - 32,2 99,7% der Daten 8,7 - 36,9

Wenn Sie sich für http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ anmelden ist Ihre E-Mail-Adresse sicherlich ein Ausreißer :)

Hier ist Was die maximale sichere Länge einer E - Mail - Adresse ist in einem Formular auf der Website zu ermöglichen? auf Raycon mit einem etwas anderen Mittelwert (N = 50.496, Mittelwert = 23):

Längenverteilung der E-Mail-Adresse


@Masi Eigentlich ist es merkwürdig, dass es sich eher um eine Poisson-Distribution als um eine normale Distribution handelt - hat jemand Ideen, warum das so ist? : P
Pageman

@pageman: Der Grund ist, dass jedes Ereignis zufällig verteilt wird UND jedes Ereignis aus dem Unendlichkeitsraum entnommen wird. - Sie erhalten eine ähnliche Verteilung, wenn Sie die Anzahl der Autos, die nach ROT fahren, so berechnen, dass Sie Zeit im Vergleich zur Anzahl der Autos haben, die in den Achsen nach Rot fahren.
Léo Léopold Hertz 29

Persönlich mag ich Benfords Gesetz besser: en.wikipedia.org/wiki/Benford%27s_law
Kitson

2
Ich habe jahrelang 120 variable Zeichen verwendet. Die Logik der realen Welt ist, dass selbst wenn jemand bereit ist, Ihr 320-Varchar-Feld zu füllen ... Ich wette, er hat eine alternative 40-
Zeichen-

17

Einfach benutzen varchar(50). Längere E-Mails sind jedes Mal Mist.

Schauen Sie, wie lang 50 Zeichen sind:

peoplewithanemail @ ddressthislongjustuseashorterone

Wenn Sie E-Mails mit 255 Zeichen zulassen:

  • Das Anzeigen kann Ihre Benutzeroberfläche durcheinander bringen (im besten Fall werden sie abgeschnitten, im schlimmsten Fall schieben sie Ihre Container und Ränder herum) und
  • Böswillige Benutzer können mit ihnen Dinge tun, die Sie nicht vorhersehen können (wie in Fällen, in denen Hacker eine kostenlose Online-API zum Speichern einer Reihe von Daten verwendeten).

(Statistiken zeigen, dass niemand mehr als 50 Zeichen für eine legitime E-Mail-Adresse eingibt, siehe z. B.: Pagemans Antwort https://stackoverflow.com/a/1199245/87861 )


5
Stimme voll und ganz zu. Wer hätte bei klarem Verstand noch eine E-Mail-Adresse? Sicher, es ist theoretisch richtig, dass eine E-Mail 320 Zeichen haben kann, aber in der realen Welt? In meinen Systemen verwende ich auch varchar (50) und habe nie eine Beschwerde erhalten, dass sich ein Benutzer nicht registrieren kann.
Norbert Norbertson

2
Es wäre interessant, aus riesigen Datenmengen zu wissen, wie hoch die durchschnittliche E-Mail-Länge in der realen Welt ist, wie die Ausreißer sind und wie groß sie sind.
Norbert Norbertson

3
Falsch. Es gibt viele reale Benutzer, die mehr als 50 Zeichen in ihrer E-Mail haben, und was noch wichtiger ist, sie können es nicht nur für Sie ändern. Es ist unfair, ihnen den Zugang für etwas zu verweigern, das sie nicht reparieren können.
Marcus Downing

2
Sie können natürlich neue E-Mails erstellen. mache Google eins.
Nicolas Manzini

Vergessen Sie auch nicht die Plus-Notation. Einige Hauptbenutzer verwenden dies, um ihre E-Mails in ihrem Posteingang zu trennen und zu organisieren. Im Wesentlichen haben sie eine eindeutige (Unter-) E-Mail für jede Website / jeden Dienst / jede App. Stellen Sie sich zum Beispiel vor, meine normale E-Mail ist mein Vor- und Nachname bei einem Firmennamen: firstnameandlastone@superacmecompany.com. Das sind schon ~ 40 Zeichen. Wenn ich nun eine Plus-Notation für ein Stackoverflow-Konto verwendet habe: firstnameandlastone+stackoverflow@superacmecompany.com - das sind ~ 55 Zeichen. Einige Plus-Notationen können länger sein, z. B. + stackoverflow-personal und * -work.
Waterlink

16

Meine geschäftliche E-Mail-Adresse besteht aus mehr als 20 Zeichen!

Lesen Sie die entsprechende RFC-Spezifikation :

"Der lokale Teil einer E-Mail-Adresse kann bis zu 64 Zeichen lang sein und der Domain-Name darf maximal 255 Zeichen lang sein."


4

Variable Zeichentypen in Datenbanken belegen keinen unnötigen Speicherplatz. Daher gibt es keinen Grund, solche Felder so weit wie möglich einzuschränken. Abhängig vom Namen einer Person, dem von ihrer Organisation verwendeten Namensschema und ihrem Domainnamen kann eine Adresse leicht mehr als 20 Zeichen enthalten.

Die Länge des lokalen Teils und des Domänennamens in RFC-2822 ist unbegrenzt . RFC-2181 begrenzt den Domänennamen jedoch auf 255 Oktette / Zeichen.

Da ein Varchar nur den Speicherplatz verwendet, der tatsächlich von der von Ihnen gespeicherten Zeichenfolge verwendet wird, gibt es keinen Grund, die Länge der E-Mail-Adresse geringfügig zu begrenzen. Gehen Sie einfach mit 512 und hören Sie auf, sich Sorgen zu machen. Alles andere ist vorzeitige Optimierung


3

Anfänglich beträgt das Maximum 320 Zeichen (64 + 1 + 255, wie in anderen Antworten gezeigt), aber wie RFC 3696 Errata 1003 sagte:

In RFC 2821 gibt es jedoch eine Einschränkung für die Länge einer Adresse in MAIL- und RCPT-Befehlen mit 256 Zeichen. Da Adressen, die nicht in diese Felder passen, normalerweise nicht nützlich sind, sollte die Obergrenze für Adresslängen normalerweise als 256 angesehen werden.

Und aus RFC 5321 Abschnitt 4.5.3.1.3 :

4.5.3.1.3. Pfad

Die maximale Gesamtlänge eines Rückwärts- oder Vorwärtspfads beträgt 256 Oktette (einschließlich Interpunktions- und Elementtrennzeichen).

Dies schließt die öffnenden und schließenden Klammern ein, sodass wir nur 254 Oktette E-Mail-Adresse haben.

Beachten Sie jedoch, dass die Anzahl der Oktette möglicherweise nicht der Anzahl der Zeichen entspricht (ein Zeichen kann 2 oder mehr Oktette enthalten). Auch der RFC-Abschnitt 4.5.3.1 besagt , dass es Felder mit mehr als dem Maximum geben kann, und dies ist möglich, aber nicht garantiert , dass Server sie korrekt abfangen.

Und dann können / müssen Sie eine verwenden VARCHAR(254), um eine E-Mail-Adresse zu speichern.

Hinweis: Zumindest in MySQL wird eine Spalte, die als VARCHARmit weniger als oder gleich 255 Oktetten deklariert ist, alle als gespeichert 1 byte + length(die 1 dient zum Speichern der Länge), sodass bei Verwendung einer unteren Grenze kein Speicherplatz gewonnen wird.


Sie können nicht erklären, wie Sie von 256 Byte auf 254 gehen. Ich weiß, dass dies das Ergebnis der öffnenden / schließenden Klammern ist, aber Sie sollten dies als Teil der Antwort erklären.
Gili

2

Wie andere gesagt haben, klingt viel größer als 20. 256 + 64 klingt gut für mich und ist RFC-konform.

Der einzige Grund, warum Sie keinen so großen Wert für Ihre Datenbank haben, ist, wenn Sie sich Gedanken über Leistung oder Speicherplatz machen, und wenn Sie dies tun, bin ich mir zu 99,99999999999999% sicher, dass dies eine vorzeitige Optimierung ist .

Geh groß raus.


VARCHAR hat nur die Anzahl der benötigten Zeichen (plus Länge) gespeichert. Ich sehe nur ein Problem, wenn Sie um Speicherplatz im Grenzwert von 8000 Byte pro Zeile kämpfen.
Richard Szalay

Ich kämpfe nicht um den Weltraum. Ich kämpfe für das Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit.
Léo Léopold Hertz 29

2

Ein CHAR (20) -Feld nimmt immer 20 Zeichen ein, unabhängig davon, ob Sie alles verwenden oder nicht. (Oft mit Leerzeichen am Ende aufgefüllt.) Ein VARCHAR (20) -Feld nimmt bis zu 20 Zeichen auf, möglicherweise jedoch weniger. Ein Vorteil der konstanten Breite von CHAR () ist das schnelle Springen zu einer Zeile in einer Tabelle, da Sie einfach den Index berechnen können, auf dem sie sein muss. Der Nachteil ist Platzverschwendung.

Der Vorteil von CHAR (x) mit konstanter Größe geht verloren, wenn Ihre Tabelle VARCHAR (x) -Spalten enthält. Ich erinnere mich, dass MySQL hinter den Kulissen alle CHAR () - Felder stillschweigend in VARCHAR () konvertierte, wenn einige Spalten VARCHAR () waren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.