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


95

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

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


"최적"이란 무엇을 의미합니까? 무엇을 "최적화"하려고합니까?
S.Lott

1
@ S.Lott : 보안 시스템을 구축하고 싶습니다. 사용자 입력이 증가하면 데이터베이스에서 코드를 실행할 수있는 위험이 증가합니다. --- 나는 최적의 보안 시스템을 확보하는 가장 좋은 방법이라고 생각합니다.
Léo Léopold Hertz 준영 2009-07-29

1
글쎄, 무언가를 제한하지 않는 것에 대한 보안 고려 사항이 있지만 표준을 따르는 것이 항상 가장 합리적입니다. "일반적인"또는 "최적"을 따르는 것은 보안 문제를 도입 한 다음 줄일 수 있습니다.
Kitson

1
StackOverflow에 대한이 질문에 따르면 최대 길이는 이제 "@"기호를 포함하여 254 자입니다. stackoverflow.com/questions/386294/…
dthrasher 2010

1
여기 @DominicSayers의 이메일 길이에 대한 관련 게시물은 정말 철저하게 대답이야 : stackoverflow.com/a/574698/361842
JohnLBevan

답변:


135

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

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

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

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

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


길이로 320을 취하는 것이 가장 좋은 것 같습니다.
Léo Léopold Hertz 준영 2009-07-29

40
나는 이것이 오래된 스레드이고 320을 사용하는 데 문제가 없다는 것을 알고 있지만 실제 최대 값은 RFC2821의 재정의 제한으로 인해 로컬 및 도메인 부분에 대해 인용 된 것 이상으로 추가 제약 조건을 부과하기 때문에 254입니다. 저장 공간이 문제라면 사람들이이 스레드를 우연히 발견했는지 알 가치가있을 수 있습니다. RFC3696
HexAndBugs

@flightplanner 말했듯이, 위키 백과는 그 부분을 요약 여기 "하지만 최대 ... 더 이상 254 자 이하로 전체 이메일 주소를 제한하지"
RustyTheBoyRobot

2
특히 이메일 필드에 고유 한 제약 조건이있는 경우; INNODB 및 utf8에서 varchar (254)는 고유 한 제약 조건을 가질만큼 충분히 작으며 (767 바이트 미만) varchar (300)은 그렇지 않습니다.
자율성

에서 RFC 3696 정오표 ID 1003 나는 256 개 문자가 실질적인 제한 (320 개 문자 최대)이라고 말한다 발견했다.
Arnold Schrijver

56

에서 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) :

이메일 주소 길이 분포


@Masi 실제로 궁금한 점은 정규 분포가 아닌 Poisson 분포라는 것입니다. 누구든지 왜 그런지 아이디어가 있습니까? : P
pageman 2009-07-29

@pageman : 그 이유는 각 이벤트가 무작위로 배포되고 각 이벤트가 무한 공간에서 가져 오기 때문입니다. -축에서 빨간색으로 주행하는 자동차 수와 시간을 갖도록 RED로 주행하는 자동차 수를 계산하면 비슷한 분포를 얻습니다.
Léo Léopold Hertz 준영 2009-07-29

개인적으로 나는 더 나은 벤 포드의 법칙 같은 : en.wikipedia.org/wiki/Benford%27s_law
킷슨

2
저는 수년 동안 120 개의 가변 문자를 사용했습니다. 현실 세계의 논리는 누군가가 320 VARCHAR 필드를 채울 준비가더라도 ... 나는 그들이 40 문자 대체 이메일 그냥 서있을 내기 때문이다
Chukky NZE

18

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

50 자 길이를보세요.

@sm_sm_ss_ss_s_s_s_s___________________________________________

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

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

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


5
전적으로 동의합니다. 누가 더 이상 이메일 주소를 갖게 될까요? 물론, 이메일이 320 자일 수 있다는 것이 이론적으로 옳지 만 실제로는? 내 시스템에서도 varchar (50)을 사용하는데 사용자가 등록 할 수 없다는 불만이 없었습니다.
노르 베르트 Norbertson

2
방대한 데이터 세트에서 평균 실제 이메일 길이가 무엇인지, 이상 치가 무엇인지, 얼마나 큰지 아는 것은 흥미로울 것입니다.
노르 베르트 Norbertson

4
잘못된. 이메일에 50 자 이상의 문자가 포함 된 실제 사용자가 많이 있으며 더 중요한 것은 사용자를 위해 변경할 수 없다는 것입니다. 그들이 고칠 수없는 것에 대한 접근을 거부하는 것은 불공평합니다.
Marcus Downing

2
물론 새 이메일을 만들 수 있습니다. Google로 만드세요.
Nicolas Manzini

또한 더하기 표기법도 잊지 마세요. 일부 고급 사용자는이를 사용하여받은 편지함에서 이메일을 분리하고 구성합니다. 기본적으로 각 웹 사이트 / 서비스 / 앱마다 고유 한 (하위) 이메일이 있습니다. 예를 들어 내 일반 이메일이 회사 이름 인 firstnameandlastone@superacmecompany.com의 이름과 성이라고 가정 해 보겠습니다. 이미 ~ 40 자입니다. 이제 stackoverflow 계정에 대해 더하기 표기법을 사용한 경우 : firstnameandlastone+stackoverflow@superacmecompany.com-최대 55 자입니다. 일부 플러스 표기법은 더 길 수 있습니다 (예 : + stackoverflow-personal 및 * -work).
Waterlink

16

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

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

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


4

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

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

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


3

처음에는 최대 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은 길이를 저장하는 것임 )로 저장되므로 하한을 사용하면 공간이 확보되지 않습니다.


256 바이트에서 254 바이트로 이동하는 방법을 설명하지 못합니다. 이것이 여는 / 닫는 대괄호의 결과라는 것을 알고 있지만 대답의 일부로 설명해야합니다.
Gili

2

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

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

커져 라.


VARCHAR은 필요한 문자 수와 길이 만 저장했습니다. 내가 보는 유일한 문제는 행당 8000 바이트 제한에서 공간을두고 싸우는 경우입니다.
Richard Szalay

나는 우주를 위해 싸우는 것이 아닙니다. 저는 보안과 유용성의 균형을 위해 싸우고 있습니다.
Léo Léopold Hertz 준영 2009-07-29

2

CHAR (20) 필드는 사용 여부에 관계없이 항상 20자를 차지합니다. (종종 끝에 공백으로 채워집니다.) VARCHAR (20) 필드는 최대 20 자까지 사용하지만 더 적게 사용합니다. CHAR ()의 상수 너비의 한 가지 이점은 테이블의 행으로 빠르게 점프하는 것입니다. 테이블이 있어야하는 인덱스 만 계산할 수 있기 때문입니다. 단점은 공간 낭비입니다.

테이블에 VARCHAR (x) 컬럼이있는 경우 상수 크기 CHAR (x)의 이점이 손실됩니다. 일부 열이 VARCHAR () 인 경우 MySQL이 자동으로 CHAR () 필드를 VARCHAR ()로 자동 변환 한 것을 기억하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.