Какова оптимальная длина для адреса электронной почты в базе данных?
Вот извлеченная часть моего запроса, отражающая тип и свойство данных столбца EMAIL_ADDRESS
:
EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,
Однако John Saunders использует VARYING(256)
.
Это говорит о том, что я не обязательно правильно понял ВАРИНГ.
Я так понимаю, что длина адреса электронной почты составляет 20 символов в моем случае, а 256 для Jodn.
Контекст в коде Джона
CREATE TABLE so."User"
(
USER_ID SERIAL NOT NULL,
USER_NAME CHARACTER VARYING(50) NOT NULL,
EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here
HASHED_PASSWORD so.HashedPassword NOT NULL,
OPEN_ID CHARACTER VARYING(512),
A_MODERATOR BOOLEAN,
LOGGED_IN BOOLEAN,
HAS_BEEN_SENT_A_MODERATOR_MESSAGE BOOLEAN,
CONSTRAINT User_PK PRIMARY KEY(USER_ID)
);
Я никогда не видел адресов электронной почты длиной более 20 символов, используемых обычными людьми.
Какова оптимальная длина для адреса электронной почты в базе данных?
Ответы
Ответ 1
Максимальная длина адреса электронной почты составляет 254 символа.
Каждый адрес электронной почты состоит из двух частей. Локальная часть, которая появляется перед знаком "@", и часть домена, которая следует за ней. В "[email protected]" локальная часть является "пользователем", а частью домена является "example.com".
Локальная часть не должна превышать 64 символа, а часть домена не может превышать 255 символов.
Объединенная длина локальных доменов + @+ адреса электронной почты не должна превышать 254 символов. Как описано в RFC3696 Errata ID 1690.
Я получил оригинальную часть этой информации здесь
Ответ 2
from Спросить Metafilter:
Мои данные поступают из базы данных 323 адреса. В распределении есть выбросы верхнего уровня (Положительно перекос). Обычно распределяется без выбросов (I протестировал его.)
Мин.: 12 1-й квартиль: 19 Среднее (w/ выбросы): 23,04 Среднее без выбросов): 22.79 3-й квартиль: 26 Макс. (С выделением): 47 Макс. (Без вычетов): 35
Медиана: 23 Режим: 24 Std. Dev (w/ выбросы): 5.20 Std. Dev (без учета выбросы): 4.70
Диапазоны, основанные на данных, включая останцы 68,2% данных 17,8 - 28,2 95,4% данных 12,6 - 33,4 99,7% данных 7,4 - 38,6
Диапазоны, основанные на выбросах данных, исключены 68,2% данных 18,1 - 27,5 95,4% данных 13,4 - 32,2 99,7% данных 8,7 - 36,9
Если вы зарегистрируетесь на http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/, то ваш адрес электронной почты, несомненно, будет превышением:)
Здесь Какова максимальная безопасная длина адреса электронной почты для разрешения в форме веб-сайта? на Raycon со слегка отличающимся средним значением (N = 50, 496, среднее value = 23):
![Распределение длин адресов электронной почты]()
Ответ 3
Мой рабочий адрес электронной почты составляет более 20 символов!
Прочтите соответствующую RFC-спецификацию:
"Локальная часть адреса электронной почты может содержать до 64 символов и имя домена может иметь максимум 255 символов"
Ответ 4
Просто используйте varchar(50)
. Более длинная электронная почта дерьмо все время.
Посмотрите, как долго 50 символов:
peoplewithanemail @ddressthislongjustuseashorterone
Ответ 5
Как говорили другие, путь, превышающий 20. 256 + 64, звучит хорошо для меня и соответствует требованиям RFC.
Единственная причина не иметь такого большого значения для вашей базы данных, если вы беспокоитесь о производительности или пространстве, а если вы это делаете, то я 99.99999999999999% уверен, что это преждевременная оптимизация.
Пойдите большим.
Ответ 6
Переменные типы символов в базах данных не занимают ненужное пространство. Таким образом, нет никаких оснований ограничивать такие поля как можно больше. В зависимости от имени человека, схемы именования, используемой их организацией и их доменным именем, адрес может легко превышать 20 символов.
Нет ограничений относительно длины локальной части и имени домена в RFC-2822. RFC-2181 ограничивает доменное имя 255 октетами/символами.
Опять же, поскольку varchar использует только пространство, фактически используемое строкой, которую вы храните, нет причин иметь небольшой предел для длины адреса электронной почты. Просто зайдите с 512 и перестаньте беспокоиться. Все остальное преждевременная оптимизация
Ответ 7
Изначально максимум составляет 320 символов (64 + 1 + 255, как показано в других ответах), но как RFC 3696 Errata 1003 сказал:
Однако в RFC 2821 существует ограничение на длину адрес в командах MAIL и RCPT по 256 символов. Поскольку адреса которые не подходят в этих областях, обычно не полезны, верхняя ограничение на длину адреса обычно должно считаться 256.
И из RFC 5321 раздел 4.5.3.1.3:
4.5.3.1.3. Путь
Максимальная общая длина обратного пути или прямого пути равна 256 октеты (включая пунктуацию и разделители элементов)
Это включает открывающие и закрывающие скобки, поэтому он позволяет нам указывать только 254 октета адреса электронной почты.
Но имейте в виду, что число октетов не может быть равно числу символов (a char может иметь 2 или более октета). Кроме того, в разделе RFC 4.5.3.1 сообщается, что могут быть поля большего размера, и это возможно, но не гарантировано, чтобы серверы правильно их поймали.
И затем вы можете/должны использовать VARCHAR(254)
для хранения адреса электронной почты.
Примечание. В MySQL, по крайней мере, столбец, объявленный как VARCHAR
с меньшим или равным 255 октетам, будет сохранен как 1 byte + length
(1 для хранения длины), поэтому пространство не увеличивается, если используется более низкий предел.
Ответ 8
Поле A CHAR (20) всегда будет содержать до 20 символов, независимо от того, используете ли вы все это или нет. (Часто заполняется пробелами в конце.) Поле VARCHAR (20) занимает до 20 символов, но может занимать меньше. Одно из преимуществ постоянной ширины CHAR() s - быстрое переключение на строку в таблице, потому что вы можете просто подсчитать индекс, в котором он должен быть включен. Недостаток - это трата пространства.
Преимущество CHAR (x) с постоянным размером теряется, если в вашей таблице есть любые столбцы VARCHAR (x). Я, кажется, помню, что MySQL молча конвертировал любые CHAR() поля в VARCHAR() за кулисами, если в некоторых столбцах были VARCHAR() s.