Я завжди користувався VARCHAR(320)
. Ось чому. Стандарт диктує такі обмеження:
- 64 символи для "локальної частини" (ім'я користувача).
- 1 символ для
@
символу.
- 255 символів для доменного імені.
Зараз деякі люди скажуть, що вам потрібно підтримати більше. Деякі люди також скажуть, що вам потрібно підтримувати Unicode для доменних імен (тобто ви повинні перейти на NVARCHAR
). Незважаючи на те, що стандарт може тим часом змінитися (пройшов час, як у мене з'явилася шкіра в грі), я впевнений, що в цей час більшість серверів у світі не прийматимуть адреси електронної пошти Unicode, і я впевнений на багатьох серверах виникнуть проблеми зі створенням та / або прийняттям адрес з> 320 символами.
З цього приводу ви можете підготуватися до найгіршого зараз, якщо вам подобається (і якщо ви використовуєте стиснення даних у SQL Server 2008 R2 або вище, ви отримаєте користь від стиснення Unicode, тобто ви сплатите лише 2-байтний штраф за символи, які насправді потрібні це). Таким чином ви можете зробити свій стовпець настільки широким, наскільки вам захочеться, і ви можете дозволити людям вносити будь-які занадто довгі сміття туди, які вони хочуть - вони не отримають електронну пошту, якщо вони дадуть вам барахло так, як вони не захочуть отримати електронну пошту, якщо вставка не вдалася. Проблема полягає в тому, якщо ви пускаєте недійсні сміття, видоведеться з цим боротися. І незалежно від того, якого розміру ви це зробите - якщо хтось спробує набити 400 символів у стовпчик на 320 символів, хтось спробує вписати 1025 символів у колонку 1024 символів. Немає причин, щоб будь-яка розумна людина мала адресу електронної пошти> 320 символів, якщо вона не використовує її для явного тестування системних меж.
Але перестаньте просити думки з цього приводу - і перестаньте дивитися на інші вказівки для керівництва (у цьому випадку так буває, що ті, на яких ви посилалися, не покладалися робити домашні завдання і просто вибирали номери з своїх, ну, ви знаєте) . У вас є прямий доступ до стандарту - переконайтеся, що ви проконсультуєтеся з останньою версією, підтримайте її як мінімум і будьте на вершині стандарту, щоб ви могли адаптуватися до змін у специфікаціях.
EDIT завдяки @ypercube за пінг у чаті.
З іншого боку, можливо, ви не хочете переносити всю адресу в одну колонку. Нормалізація може припустити, що ви не хочете зберігати @hotmail.com
15 мільйонів разів, коли набагато більш стрункий FK int працював би чудово і не мав додаткових накладних витрат стовпців змінної довжини. Крім того, можна нормувати ім'я користувача, так як john.smith@hotmail.com
і john.smith@gmail.com
поділяють спільне ім'я - вони не знають один одного , але база даних не дбає про це.
Я говорив про щось тут:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficient-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficient-in-sql-server--part-2/
Однак це вводить виклики до вищевказаного обмеження на 254 символів, оскільки, здається, немає єдиної думки щодо того, що відбувається, коли дійсний домен 255 символів поєднується з дійсним локальним розділом з 1 символом. Це повинно прийняти більшість серверів у всьому світі, але, схоже, порушує цю межу з 254 символами. Отже, ви створюєте Domains
таблицю з штучно меншим обмеженням довжини для адрес електронної пошти, коли домен можна буде повторно використовувати як дійсну URL-адресу з 255 символами?