it-swarm.com.de

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

Hier ist ein Auszug meiner Abfrage, der den Datentyp und die Eigenschaft der Spalte EMAIL_ADDRESS Widerspiegelt:

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

John Saunders verwendet jedoch VARYING(256).

Dies lässt mich vermuten, dass ich das VARIEREN 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 256 für Jodn.

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?

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 "[email protected]" ist der lokale Teil "user" und der Domain-Teil "example.com".

Der lokale Teil darf nicht länger als 64 Zeichen sein und der Domain-Teil darf nicht länger als 255 Zeichen sein.

Die Gesamtlänge der lokalen + @ + Domänenteile einer E-Mail-Adresse darf 254 Zeichen nicht überschreiten. Wie in RFC3696 Errata ID 169 beschrieben.

Ich habe den Originalteil dieser Information von hier erhalten

123
Iain Hoult

von Metafilter fragen :

Meine Daten stammen aus einer Datenbank mit 323 Adressen. Die Verteilung weist einige obere Ausreißer auf (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 (w/outliers): 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 basierend auf Datenausreißern ausgeschlossen 68,2% der Daten 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 mit Sicherheit ein Ausreißer :)

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

Email address length distribution

55
pageman

Meine Arbeits-E-Mail-Adresse besteht aus mehr als 20 Zeichen!

Lesen Sie die entsprechenden RFC-Spezifikation :

"Der lokale Teil einer E-Mail-Adresse darf maximal 64 Zeichen lang sein und der Domänenname darf maximal 255 Zeichen lang sein."

17
Dan Diplo

Verwenden Sie einfach 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 Dinge mit ihnen 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 tatsächlich mehr als 50 Zeichen für eine legitime E-Mail-Adresse eingibt, siehe z. B .: pageman's answer https://stackoverflow.com/a/1199245/87861 )

15
Nicolas Manzini

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

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

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

3
VoidPointer

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

In RFC 2821 ist jedoch die Länge einer Adresse in MAIL- und RCPT-Befehlen mit 256 Zeichen beschränkt. Da Adressen, die nicht in diese Felder passen, normalerweise nicht nützlich sind, sollte die Obergrenze der Adresslängen normalerweise bei 256 liegen.

Und aus RFC 5321 Abschnitt 4.5.3.1. :

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 Oktetts der E-Mail-Adresse eingeben können.

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 die RFC-Abschnitt 4.5.3.1 sagen, dass es Felder geben kann, die das Maximum überschreiten, und dies ist möglich, aber nicht garantiert, dass Server sie korrekt abfangen.

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

Hinweis: Zumindest in MySQL wird eine als VARCHAR deklarierte Spalte mit weniger oder gleich 255 Oktetten als 1 byte + length (die 1 dient zum Speichern der Länge), sodass bei Verwendung einer unteren Grenze kein Platz gewonnen wird.

2
PhoneixS

Wie andere gesagt haben, 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 die Leistung oder den Speicherplatz machen und wenn Sie dies tun, dann bin ich mir zu 99.99999999999999% sicher, dass vorzeitige Optimierung.

Geh groß raus.

2
Stu Thompson

Ein CHAR (20) -Feld umfasst immer 20 Zeichen, unabhängig davon, ob Sie alles verwenden oder nicht. (Oft mit Leerzeichen am Ende aufgefüllt.) Ein VARCHAR (20) -Feld nimmt bis z 20 Zeichen auf, kann aber weniger aufnehmen. 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 er 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 scheine mich zu erinnern, dass MySQL im Hintergrund alle CHAR () -Felder in VARCHAR () konvertierte, wenn einige Spalten VARCHAR () waren.

1
Stig Brautaset