Подтвердить что ты не робот

Какова оптимальная длина для адреса электронной почты в базе данных?

Вот извлеченная часть моего запроса, отражающая тип и свойство данных столбца 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 символов, используемых обычными людьми.

Какова оптимальная длина для адреса электронной почты в базе данных?

4b9b3361

Ответ 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.