NVARCHAR (?) Для адресов электронной почты в SQL Server - PullRequest
11 голосов
/ 15 февраля 2012

Для адресов электронной почты, сколько места я должен дать столбцам в SQL Server.

Я нашел это определение в Википедии:

http://en.wikipedia.org/wiki/Email_address

Формат адресов электронной почты - local-part @ domain, где local-part может иметь длину до 64 символов, а имя домена может содержать не более 253 символов, но максимальная длина 256 символов прямого или обратного пути ограничивает весь путь.адрес электронной почты должен быть не более 254 символов

А этот:

http://askville.amazon.com/maximum-length-allowed-email-address/AnswerViewer.do?requestId=1166932

Итак, на данный момент общее количество символов, разрешенных для электронной почтыпочтовый адрес 64 (локальная часть) + 1 (знак "@") + 255 (доменная часть) = 320

Возможно, что в будущем они увеличат ограничение локальной части до 128 символов.что составляет всего 384 символа.

Есть мысли?

Ответы [ 2 ]

14 голосов
/ 15 февраля 2012

Я всегда использовал 320 на основе вашего последнего расчета. Вам ничего не стоит позволить больше *, если только люди не злоупотребляют этим и не набивают ерунду. может стоить , чтобы позволить вам меньше, так как у вас будут разочаровывающие пользователи, если у них законно более длинные адреса электронной почты, и теперь вам придется возвращаться и обновлять схему, код, параметры и т. Д. В система, с которой я работал (поставщик услуг электронной почты), самый длинный адрес электронной почты, с которым я столкнулся, составлял приблизительно 120 символов - и было ясно, что они просто делают длинный адрес электронной почты для ухмылок.

* Не совсем верно, поскольку оценки предоставления памяти основаны на предположении, что столбцы переменной ширины заполнены наполовину, поэтому более широкий столбец, в котором хранятся одни и те же данные, может привести к очень разным характеристикам производительности некоторых запросов.

И я спорил, нужен ли NVARCHAR для адреса электронной почты. Я еще не сталкивался с адресом электронной почты с символами Unicode - я знаю, что стандарт поддерживает их, но многие существующие системы этого не делают, было бы довольно неприятно, если бы это был ваш адрес электронной почты.

И хотя действительно, что NVARCHAR стоит вдвое больше места, с SQL Server 2008 R2 вы можете извлечь выгоду из сжатия Unicode, которое в основном обрабатывает все не-Unicode символы в столбце NVARCHAR как ASCII, так что вы получаете эти дополнительные байты назад. Конечно, сжатие доступно только в Enterprise + ...

Другой способ уменьшить требования к пространству - это использовать центральную таблицу поиска для всех наблюдаемых доменных имен, хранить LocalPart и DomainID с пользователем и сохранять каждое уникальное доменное имя только один раз. Да, это делает более громоздким программирование, но если у вас есть 80 000 адресов hotmail.com, стоимость составляет 80 000 x 4 байта вместо 80 000 x 11 байтов (или меньше при сжатии). Если узким местом является хранилище или ввод-вывод, а не процессор, это определенно стоит изучить.

Я писал об этом здесь:

http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/

0 голосов
/ 15 февраля 2012

Я думаю, VARCHAR (320) будет нормальным пределом для доменного имени и адреса электронной почты на основе ASCII.Но разве мы не начнем видеть доменные имена в юникоде, которые появятся в ближайшее время?

http://en.wikipedia.org/wiki/Internationalized_domain_name

Может быть, NVARCHAR (320) - это то, что мы должны начать использовать?

...