Oto wyodrębniona część mojego zapytania, odzwierciedlająca EMAIL_ADDRESS
typ danych kolumny i właściwość:
EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,
Jednak John Saunders używa VARYING(256)
.
To sugeruje mi, że niekoniecznie poprawnie zrozumiałem RÓŻNICĘ.
Rozumiem to tak, że długość adresu e-mail wynosi w moim przypadku 20 znaków, natomiast dla Jodn 256.
Kontekst w kodzie Johna
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)
);
Nigdy nie widziałem adresów e-mail dłuższych niż 20 znaków, używanych przez zwykłych ludzi.
Jaka jest optymalna długość adresu e-mail w bazie danych?
database
performance
email
database-design
Léo Léopold Hertz 준영
źródło
źródło
Odpowiedzi:
Maksymalna długość adresu e-mail to 254 znaki.
Każdy adres e-mail składa się z dwóch części. Część lokalna znajdująca się przed znakiem „@” i następująca po nim część domeny. W „[email protected]” część lokalna to „user”, a część domeny to „example.com”.
Część lokalna nie może przekraczać 64 znaków, a część domeny nie może przekraczać 255 znaków.
Łączna długość lokalnych części + @ + domeny adresu e-mail nie może przekraczać 254 znaków. Zgodnie z opisem w RFC3696 Errata ID 1690 .
Stąd uzyskałem oryginalną część tych informacji
źródło
z Ask Metafilter :
Jeśli zarejestrujesz się w http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/, Twój adres e-mail z pewnością będzie odstający :)
Oto jaka jest maksymalna bezpieczna długość adresu e-mail, na którą można zezwolić w formularzu strony internetowej? na Raycon z nieco inną średnią (N = 50,496, średnia = 23):
źródło
Po prostu użyj
varchar(50)
. Dłuższe e-maile za każdym razem są bzdurne.Spójrz tylko, ile ma 50 znaków:
peoplewithanemail @ ddressthislongjustuseashorterone
Jeśli zezwolisz na e-maile o długości 255 znaków:
(Statystyki pokazują, że nikt tak naprawdę nie wprowadza więcej niż około 50 znaków dla prawdziwego adresu e-mail, patrz np .: odpowiedź pagemana https://stackoverflow.com/a/1199245/87861 )
źródło
Mój służbowy adres e-mail ma więcej niż 20 znaków!
Przeczytaj odpowiednią specyfikację RFC :
źródło
Zmienne typy znaków w bazach danych nie zajmują niepotrzebnej przestrzeni. Dlatego nie ma powodu, aby ograniczać takie pola w jak największym stopniu. W zależności od nazwiska osoby, schematu nazewnictwa używanego przez jej organizację i nazwy domeny, adres może z łatwością przekraczać 20 znaków.
Nie ma ograniczeń co do długości części lokalnej i nazwy domeny w RFC-2822 . RFC-2181 ogranicza jednak nazwę domeny do 255 oktetów / znaków.
Ponownie, ponieważ varchar wykorzystuje tylko przestrzeń faktycznie używaną przez przechowywany ciąg, nie ma powodu, aby mieć małe ograniczenie długości adresu e-mail. Po prostu idź z 512 i przestań się martwić. Wszystko inne to przedwczesna optymalizacja
źródło
Początkowo maksymalna liczba to 320 znaków (64 + 1 + 255, jak pokazano w innych odpowiedziach), ale jak mówi RFC 3696 Errata 1003 :
I z RFC 5321, sekcja 4.5.3.1.3 :
Obejmuje to nawiasy otwierające i zamykające, dzięki czemu możemy podać tylko 254 oktety adresu e-mail.
Należy jednak pamiętać, że liczba oktetów może nie być równa liczbie znaków (znak może mieć 2 lub więcej oktetów). Również sekcja RFC 4.5.3.1 mówi, że mogą istnieć pola o większej wartości niż maksymalna i jest to możliwe, ale nie jest gwarantowane, że serwery prawidłowo je wychwycą.
Następnie możesz / musisz użyć
VARCHAR(254)
do przechowywania adresu e-mail.Uwaga: przynajmniej w MySQL kolumna zadeklarowana jako
VARCHAR
odrobina mniejsza lub równa 255 oktetów będzie przechowywana jako1 byte + length
(1 oznacza długość), więc jeśli zostanie zastosowany dolny limit, nie zostanie uzyskana przestrzeń.źródło
Jak powiedzieli inni, dużo większe niż 20. 256 + 64 brzmi dla mnie dobrze i jest zgodne z RFC.
Jedynym powodem, dla którego Twoja baza danych nie ma tak dużej wartości, jest to, że martwisz się o wydajność lub miejsce, a jeśli to robisz, jestem pewien na 99,9999999999999%, że jest to przedwczesna optymalizacja .
Idź na całość.
źródło
Pole CHAR (20) zawsze zajmie 20 znaków, niezależnie od tego, czy używasz go w całości, czy nie. (Często dopełniane spacjami na końcu.) Pole VARCHAR (20) zajmuje do 20 znaków, ale może zajmować mniej. Jedną z zalet stałej szerokości CHAR () jest szybkie przeskakiwanie do wiersza w tabeli, ponieważ możesz po prostu obliczyć indeks, na którym musi się znajdować. Wadą jest marnowanie miejsca.
Korzyści płynące ze stosowania znaków CHAR (x) o stałym rozmiarze są tracone, jeśli w tabeli znajdują się kolumny typu VARCHAR (x). Wydaje mi się, że MySQL po cichu konwertował wszystkie pola CHAR () na VARCHAR () za kulisami, jeśli niektóre kolumny były VARCHAR ().
źródło