Zawsze używałem VARCHAR(320)
. Dlatego. Norma określa następujące ograniczenia:
- 64 znaki dla „części lokalnej” (nazwa użytkownika).
- 1 znak dla
@
symbolu.
- 255 znaków dla nazwy domeny.
Teraz niektórzy ludzie powiedzą, że potrzebujesz więcej wsparcia. Niektórzy powiedzą również, że musisz obsługiwać Unicode dla nazw domen (co oznacza, że musisz się przełączyć NVARCHAR
). Chociaż w międzyczasie standard może się zmienić (minęło trochę czasu, odkąd mam skórkę w grze), jestem całkiem pewien, że w tej chwili większość serwerów na świecie nie akceptuje adresów e-mail Unicode i jestem pewien wiele serwerów będzie miało problemy z tworzeniem i / lub akceptowaniem adresów zawierających> 320 znaków.
To powiedziawszy, możesz teraz przygotować się na najgorsze, jeśli chcesz (a jeśli używasz kompresji danych w SQL Server 2008 R2 lub lepszej, skorzystasz z kompresji Unicode, co oznacza, że płacisz tylko 2 bajty kary za znaki, które faktycznie potrzebują to). W ten sposób możesz ustawić kolumnę tak szeroką, jak chcesz, i pozwolić innym na umieszczanie tam zbyt długich śmieci, których chcą - nie otrzymają wiadomości e-mail, jeśli podadzą ci śmieci tak, jak tego nie zrobią otrzymać e-mail, jeśli wkładka nie powiedzie się. Problemem jest to, jeśli pozwolisz, nieprawidłową śmieci w ciebiemuszę sobie z tym poradzić. I bez względu na to, jaki rozmiar wybierzesz - jeśli ktoś spróbuje upchnąć 400 znaków w kolumnie o długości 320 znaków, ktoś spróbuje upchnąć 1025 znaków w kolumnie o długości 1024 znaków. Nie ma powodu, aby jakakolwiek rozsądna osoba miała adres e-mail> 320 znaków, chyba że używa go do jawnego testowania granic systemu.
Ale przestańcie pytać o opinie na ten temat - i przestańcie szukać innych implementacji w celu uzyskania wskazówek (tak się dzieje w tym przypadku, że te, o których wspominaliście, nie zadawali sobie trudu, aby odrobić pracę domową i po prostu wybrali numery z ich, no cóż, wiesz) . Masz bezpośredni dostęp do standardu - koniecznie zapoznaj się z najnowszą wersją, obsługuj ją jako minimum i bądź na bieżąco z normą, aby dostosować się do zmian w specyfikacji.
EDYCJA dzięki @ypercube do pingowania na czacie.
Nawiasem mówiąc, być może nie chcesz w ogóle zrzucić całego adresu do jednej kolumny. Normalizacja może sugerować, że nie chcesz przechowywać @hotmail.com
15 milionów razy, gdy znacznie chudszy FK int działałby dobrze i nie miałby dodatkowego obciążenia kolumny o zmiennej długości. Możesz także znormalizować nazwę użytkownika john.smith@hotmail.com
i john.smith@gmail.com
udostępnić wspólną nazwę użytkownika - nie znają się, ale twoja baza danych nie dba o to.
Mówiłem o niektórych z tego tutaj:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/
Wprowadza to jednak wyzwania dla powyższego limitu 254 znaków, ponieważ wydaje się, że nie ma zgody co do tego, co się stanie, gdy ważna domena 255 znaków zostanie połączona z prawidłową częścią lokalną 1-znakową. Powinno to zostać zaakceptowane przez większość serwerów na całym świecie, ale wydaje się, że narusza ten limit 254 znaków. Czy tworzysz więc Domains
tabelę, która ma sztucznie niższe ograniczenie długości adresów e-mail, kiedy domena może być ponownie wykorzystana jako prawidłowy adres URL o długości 255 znaków?