NVARCHAR(?) Для адресов электронной почты в SQL Server
Для адресов электронной почты, сколько места я должен дать столбцы в 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 ответа
Я всегда использовал 320 на основе вашего последнего расчета. Вам не нужно ничего доплачивать *, если только люди не злоупотребляют этим и не загружают туда мусор. Это может стоить вам позволить меньше, так как у вас будут разочаровывающие пользователи, если у них законно более длинные адреса электронной почты, и теперь вам придется возвращаться и обновлять схему, код, параметры и т. Д. В системе, которую я использовал для работы с (поставщиком услуг электронной почты) самый длинный адрес электронной почты, с которым я столкнулся, составлял приблизительно 120 символов - и было ясно, что они просто делали длинный адрес электронной почты для усмешек.
* Не совсем верно, поскольку оценки предоставления памяти основаны на предположении, что столбцы переменной ширины заполнены наполовину, поэтому более широкий столбец, хранящий те же данные, может привести к значительным различиям характеристик производительности определенных запросов.
И я спорил ли NVARCHAR
необходимо для адреса электронной почты. Я еще не сталкивался с адресом электронной почты с символами Unicode - я знаю, что стандарт поддерживает их, но многие существующие системы этого не делают, было бы довольно неприятно, если бы это был ваш адрес электронной почты.
И хотя это правда, что NVARCHAR
стоит вдвое больше места, с SQL Server 2008 R2 вы можете извлечь выгоду из сжатия Unicode, которое в основном обрабатывает все не-Unicode символы в NVARCHAR
столбец как ASCII, так что вы получите эти дополнительные байты обратно. Конечно, сжатие доступно только в Enterprise+...
Другой способ уменьшить требования к пространству - использовать центральную справочную таблицу для всех наблюдаемых доменных имен и хранить LocalPart
а также DomainID
с пользователем, и сохраняйте каждое уникальное доменное имя только один раз. Да, это делает более громоздким программирование, но если у вас есть 80000 адресов hotmail.com, стоимость составляет 80000 x 4 байта вместо 80000 x 11 байтов (или меньше при сжатии). Если узким местом является хранилище или ввод-вывод, а не процессор, то этот вариант определенно стоит изучить.
Я написал об этом здесь:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
Я думаю, VARCHAR(320) будет нормальным пределом для доменного имени и адреса электронной почты на основе ASCII. Но разве мы не начнем видеть доменные имена Unicode, появляющиеся в ближайшее время?
http://en.wikipedia.org/wiki/Internationalized_domain_name
Может быть, NVARCHAR(320) - это то, что мы должны начать использовать?