[database] 데이터베이스에서 이메일 주소의 최적 길이는 얼마입니까?

다음은 EMAIL_ADDRESS열 데이터 유형 및 속성을 반영하여 내 쿼리의 추출 된 부분입니다 .

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,

그러나 John SaundersVARYING(256).

이것은 내가 반드시 VARYING을 올바르게 이해하지 못했음을 시사합니다.

제 경우에는 이메일 주소의 길이가 20 자이고 Jodn은 256 자라는 것을 이해합니다.

John 코드의 컨텍스트

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 자 이상의 이메일 주소를 본 적이 없습니다.

데이터베이스에서 이메일 주소의 최적 길이는 얼마입니까?



답변

이메일 주소의 최대 길이는 254 자입니다.

모든 이메일 주소는 두 부분으로 구성됩니다. ‘@’기호 앞에 오는 로컬 부분과 그 뒤에 오는 도메인 부분. “user@example.com”에서 로컬 부분은 “user”이고 도메인 부분은 “example.com”입니다.

로컬 부분은 64자를 초과 할 수 없으며 도메인 부분은 255자를 초과 할 수 없습니다.

이메일 주소의 로컬 + @ + 도메인 부분을 합한 길이는 254자를 초과 할 수 없습니다. RFC3696 에라타 ID 1690에 설명 된 대로 .

여기에서이 정보의 원래 부분을 얻었습니다.


답변

에서 Metafilter 질문 :

내 데이터는 323 개 주소의 데이터베이스에서 가져옵니다. 분포에는 일부 상한 이상 치가 있습니다 (양수로 치우침). 이상 값없이 정규 분포를 따릅니다 (테스트했습니다.).

최소 : 12 1 사 분위 : 19 평균 (이상치 포함) : 23.04 평균 (이상치 제외) : 22.79 3 사 분위 : 26 최대 (이상치 포함) : 47 최대 (이상치 제외) : 35

중앙값 : 23 모드 : 24 표준 Dev (이상치 포함) : 5.20 Std. 편차 (이상 값 없음) : 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, 평균 = 23) :

이메일 주소 길이 분포


답변

사용하십시오 varchar(50). 더 긴 이메일은 매번 쓰레기입니다.

50 자 길이를보세요.

@sm_sm_ss_ss_s_s_s_s___________________________________________

255 자 이메일을 허용하는 경우 :

  • 그것들을 표시하면 UI가 엉망이 될 수 있습니다 (기껏해야 잘릴 수 있고 최악의 경우 컨테이너와 여백이 밀려납니다).
  • 악의적 인 사용자가 예상 할 수없는 작업을 수행 할 수 있습니다 (해커가 무료 온라인 API를 사용하여 많은 데이터를 저장 한 경우).

(통계에 따르면 아무도 실제로 합법적 인 이메일 주소로 약 50 자 이상을 입력하지 않습니다. 예 : pageman의 답변 https://stackoverflow.com/a/1199245/87861 참조 )


답변

내 직장 이메일 주소가 20 자 이상입니다!

적절한 RFC 사양을 읽으십시오 .

“이메일 주소의 로컬 부분은 최대 64 자이고 도메인 이름은 최대 255 자일 수 있습니다.”


답변

데이터베이스의 가변 문자 유형은 불필요한 공간을 차지하지 않습니다. 따라서 가능한 한 이러한 필드를 제한 할 이유가 없습니다. 사람의 이름, 조직에서 사용하는 명명 체계 및 도메인 이름에 따라 주소는 쉽게 20자를 초과 할 수 있습니다.

RFC-2822 에서 local-part 및 domain-name의 길이에는 제한이 없습니다 . RFC-2181 은 도메인 이름을 255 옥텟 / 문자로 제한합니다.

다시 말하지만, varchar 는 저장 한 문자열에서 실제로 사용하는 공간 만 사용하기 때문에 이메일 주소 길이에 대해 작은 제한을 둘 이유가 없습니다. 512로 이동하고 걱정하지 마십시오. 다른 모든 것은 조기 최적화입니다.


답변

처음에는 최대 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 옥텟 의 이메일 주소 만 사용할 수 있습니다.

그러나 옥텟의 수는 문자의 수와 같지 않을 수 있음을 명심하십시오 (문자는 2 개 이상의 옥텟을 가질 수 있음). 또한 RFC 섹션 4.5.3.1 은 최대 값보다 더 많은 필드가있을 수 있으며 이것이 가능하지만 서버가 올바르게 포착하도록 보장하지 않는다고 말합니다.

그런 다음 a VARCHAR(254)를 사용하여 이메일 주소를 저장할 수 있습니다 .

참고 : 최소한 MySQL에서 VARCHAR255 옥텟보다 작거나 같은 whit으로 선언 된 열은 모두 1 byte + length(1은 길이를 저장하는 것임 )로 저장되므로 하한을 사용하면 공간이 확보되지 않습니다.


답변

다른 사람들이 말했듯이, 20. 256 + 64보다 훨씬 큰 소리가 나에게 좋으며 RFC를 준수합니다.

데이터베이스에 대해 그렇게 큰 가치를 갖지 않는 유일한 이유는 성능이나 공간에 대해 걱정하는 경우이며, 그렇게한다면 조기 최적화 가 99.99999999999999 %라고 확신합니다. .

커져 라.