Я всегда использовал VARCHAR(320)
. Вот почему Стандарт диктует следующие ограничения:
- 64 символа для «локальной части» (имя пользователя).
- 1 символ для
@
символа.
- 255 символов для доменного имени.
Теперь, некоторые люди скажут, что вам нужно поддерживать больше, чем это. Некоторые люди также скажут, что вам нужно поддерживать Unicode для доменных имен (то есть вы должны переключиться на NVARCHAR
). В то время как стандарт может измениться в это время (прошло много времени с тех пор, как у меня был скин в игре), я вполне уверен, что в настоящее время большинство серверов в мире не будут принимать адреса электронной почты Unicode, и я уверен, у многих серверов возникнут проблемы при создании и / или принятии адресов длиной более 320 символов.
Тем не менее, вы можете подготовиться к худшему сейчас, если хотите (и если вы используете сжатие данных в SQL Server 2008 R2 или выше, вы получите выгоду от сжатия Unicode, то есть вы платите только 2-байтовый штраф за символы, которые действительно нужны Это). Таким образом, вы можете сделать вашу колонку настолько широкой, насколько вы хотите, и вы можете позволить людям загружать туда любой слишком длинный мусор, который они хотят - они не получат электронное письмо, если они будут давать вам барахло так же, как они не будут получить электронную почту, если вставка не удалась. Проблема в том, что если вы пропустите недействительный мусор, выприходится иметь дело с этим. И независимо от того, какого размера вы его сделаете - если кто-то попытается вставить 400 символов в столбец из 320 символов, кто-то попытается вставить 1025 символов в столбец из 1024 символов. Нет причин, по которым любой разумный человек должен иметь адрес электронной почты> 320 символов, если только он не использует его для явного тестирования системных границ.
Но перестаньте спрашивать мнения по этому поводу - и перестаньте смотреть на другие реализации для руководства (просто так в этом случае, что те, на кого вы ссылались, не удосужились сделать свою домашнюю работу и просто выбрали номера из своих, ну, вы знаете) , У вас есть прямой доступ к стандарту - убедитесь, что вы обращаетесь к самой последней версии, поддерживаете ее как минимум и остаетесь на вершине стандарта, чтобы вы могли адаптироваться к изменениям в спецификациях.
РЕДАКТИРОВАТЬ благодаря @ypercube за пинг в чате.
Кроме того, возможно, вы не хотите в первую очередь сваливать весь адрес в один столбец. Нормализация может указывать на то, что вы не хотите хранить @hotmail.com
15 миллионов раз, когда гораздо более тонкий FK int будет работать просто отлично и не иметь дополнительных издержек на столбцы переменной длины. Вы также можете нормализовать имя пользователя, как john.smith@hotmail.com
и john.smith@gmail.com
разделить общее имя пользователя - они не знают друг друга, но ваша база данных не заботится об этом.
Я говорил об этом здесь:
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/
Это, однако, создает проблемы для вышеуказанного предела в 254 символа, поскольку, похоже, нет единого мнения о том, что происходит, когда действительный домен из 255 символов объединяется с допустимым локальным разделом из 1 символа. Это должно быть принято большинством серверов по всему миру, но, похоже, нарушает этот предел в 254 символа. Итак, вы создаете Domains
таблицу с искусственно меньшим ограничением длины для адресов электронной почты, когда домен может быть повторно использован в качестве действительного 255-символьного URL?