나는 항상 사용했습니다 VARCHAR(320)
. 이유는 다음과 같습니다. 이 표준 은 다음과 같은 제한 사항을 규정합니다.
- "로컬 부분"(사용자 이름)은 64 자입니다.
@
기호 는 1 자입니다 .
- 도메인 이름은 255 자입니다.
이제 일부 사람들은 그 이상을 지원해야한다고 말합니다. 일부 사람들은 도메인 이름에 유니 코드를 지원해야한다고 말합니다 (즉,로 전환해야 함 NVARCHAR
). 그 동안 표준이 변경 될 수는 있지만 (게임에 스킨을 적용한 지 오래되었습니다), 현재는 세계 대부분의 서버가 유니 코드 전자 메일 주소를 허용하지 않을 것이라고 확신합니다. 많은 서버에서 320 자 이상의 주소를 생성 및 / 또는 수락하는 데 문제가 있습니다.
즉, 원하는 경우 최악의 상황에 대비할 수 있습니다. SQL Server 2008 R2 이상에서 데이터 압축을 사용하는 경우 유니 코드 압축의 이점이 있습니다. 즉, 실제로 필요한 문자에 대해서는 2 바이트의 벌금 만 지불하면됩니다 그것). 이렇게하면 원하는만큼 열을 넓힐 수 있고 사람들이 원하는 곳에 너무 긴 정크를 넣을 수 있습니다. 그들이 원하는 것처럼 정크를 주면 이메일을받지 못합니다. 삽입이 실패하면 이메일을받습니다. 당신이 무효 쓰레기를 할 경우 문제는 당신그것을 처리해야합니다. 크기에 상관없이 누군가 320 자 열에 400자를 채우려 고하면 1025 자 문자를 1024 자 열에 넣으려고합니다. 현명한 사람이 시스템 경계를 명시 적으로 테스트하기 위해 사용하지 않는 전자 메일 주소가 320자를 초과해야하는 이유는 없습니다.
그러나 이것에 대한 의견 을 묻지 말고 지침에 대한 다른 구현을 찾는 것을 중단하십시오 (이 경우 참조 한 사람들이 자신의 숙제를하고 귀찮게하지 않았기 때문에 발생합니다) . 표준에 직접 액세스 할 수 있습니다. 최신 버전을 참조하고 최소한으로 지원 하며 표준의 최신 상태를 유지하여 사양 변경에 적응할 수 있도록하십시오.
편집 덕분에 채팅 핑 (ping)에 대한 @ypercube합니다.
제쳐두고, 아마도 당신은 전체 주소를 처음에 하나의 열에 덤프하고 싶지 않을 것입니다. 정규화 @hotmail.com
는 훨씬 더 얇은 FK int가 제대로 작동하고 가변 길이 열의 추가 오버 헤드가 없을 때 1500 만 번 을 저장하고 싶지 않다고 제안 할 수 있습니다. 또한 정상화 사용자 이름은, 같은 수 john.smith@hotmail.com
및 john.smith@gmail.com
공통 이름을 공유 - 그들은 서로 모르는 그러나 당신의 데이터베이스는 그것에 대해 상관하지 않는다.
나는 이것에 대해 이것에 대해 이야기했다 :
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/
그러나 유효한 255 자 도메인이 유효한 1 자 로컬 파트와 결합 될 때 발생하는 상황에 대해서는 합의가 보이지 않기 때문에 위의 254 자 제한에 대한 문제가 발생합니다. 이것은 전 세계 대부분의 서버에서 받아 들여야하지만이 254 자 제한을 위반하는 것 같습니다. 따라서 Domains
도메인을 유효한 255 자 URL로 재사용 할 수 있을 때 전자 메일 주소 길이에 대해 인위적으로 더 낮은 제한이 있는 테이블을 작성 합니까?