Hier ist ein extrahierter Teil meiner Abfrage, der den EMAIL_ADDRESS
Spaltendatentyp 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?
database
performance
email
database-design
Léo Léopold Hertz 준영
quelle
quelle
Antworten:
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 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
quelle
von Ask Metafilter :
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):
quelle
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:
(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 )
quelle
Meine geschäftliche E-Mail-Adresse besteht aus mehr als 20 Zeichen!
Lesen Sie die entsprechende RFC-Spezifikation :
quelle
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
quelle
Anfänglich beträgt das Maximum 320 Zeichen (64 + 1 + 255, wie in anderen Antworten gezeigt), aber wie RFC 3696 Errata 1003 sagte:
Und aus RFC 5321 Abschnitt 4.5.3.1.3 :
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
VARCHAR
mit weniger als oder gleich 255 Oktetten deklariert ist, alle als gespeichert1 byte + length
(die 1 dient zum Speichern der Länge), sodass bei Verwendung einer unteren Grenze kein Speicherplatz gewonnen wird.quelle
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.
quelle
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.
quelle