データベースの電子メールアドレスの最適な長さはどれくらいですか?


93

以下は、EMAIL_ADDRESS列のデータ型とプロパティを反映した、クエリの抽出部分です。

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

ただし、John Saundersはを使用していVARYING(256)ます。

これは、必ずしもVARYINGを正しく理解しているわけではないことを示唆しています。

私の場合、メールアドレスの長さは20文字、Jodnの長さは256文字であると理解しています。

ジョンのコードのコンテキスト

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、2009

1
@ S.Lott:安全なシステムを構築したい。ユーザーの入力が増えると、データベースでコードを実行できるリスクが高まります。---安全なシステムを構築するための最適な方法として最適を考えています。
レオ・レオポルド・ヘルツ준 영

1
さて、制限のないものを作成しないことにはセキュリティ上の考慮事項がありますが、標準を遵守することは常に最も理にかなっています。「一般的」または「最適」なものに従うと、セキュリティの問題が発生し、問題が軽減される可能性があります。
キットソン、

1
StackOverflowの上のこの質問は、最大長さは、今、「@」記号を含む254個の文字であることを示唆している:stackoverflow.com/questions/386294/...
dthrasher

1
ここで@DominicSayersからの電子メールの長さに関連する投稿は本当に徹底的な答えで、です:stackoverflow.com/a/574698/361842
JohnLBevan

回答:


134

メールアドレスの最大長は254文字です。

すべてのメールアドレスは2つの部分で構成されています。'@'記号の前にあるローカル部分と、それに続くドメイン部分。「user@example.com」では、ローカル部分は「user」、ドメイン部分は「example.com」です。

ローカル部分は64文字を超えてはならず、ドメイン部分は255文字を超えることはできません。

メールアドレスのローカル+ @ +ドメイン部分を組み合わせた長さは、254文字を超えてはなりません。RFC3696 Errata ID 1690で説明されています

この情報の元の部分はここから入手しました


長さとして320を取るのがベストだそうです。
レオ・レオポルド・ヘルツ준 영

40
これは古いスレッドであり、320を使用しても問題はありませんが、RFC2821のオーバーライド制限により、ローカルパーツとドメインパーツに対して引用されている制約に加えて追加の制約が課されるため、実際の最大値は254です。記憶域に問題がある場合は、このスレッドでつまずくかどうかを知る価値があるかもしれません。RFC3696の正誤表の正誤
HexAndBugs

@flightplannerが言ったように、ウィキペディアはこれらのセクションをここに要約します:「しかし、最大...メールアドレス全体が254文字を超えないように制限します」
RustyTheBoyRobot

2
特に、電子メールフィールドに一意の制約を設定する場合は、INNODBおよびutf8のもとでは、varchar(254)は一意の制約を持つのに十分(767バイト未満)であり、varchar(300)はそうではありません。
Autonomy

1003 RFC 3696エラッタID私はそれが256の文字が実用限界であると述べている(320文字まで)を発見しました。
アーノルドシュライバー

56

Ask Metafilterから:

私のデータは323アドレスのデータベースからのものです。分布にはいくつかの上限の外れ値があります(明確に歪んでいます)。通常、異常値なしで配布されます(私はテストしました)。

最小:12第1四分位:19平均(外れ値あり):23.04平均(外れ値なし):22.79第3四分位:26最大(外れ値あり):47最大(外れ値なし):35

中央値:23モード:24標準 Dev(外れ値あり):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/にサインアップすると、あなたのメールアドレスは確かに異常値になります:)

ここだウェブサイトの形でできるようにする電子メールアドレスの最大安全の長さは何ですか?わずかに異なる平均値を持つレイコン(N = 50,496、平均値= 23):

メールアドレス長分布


@Masiが実際に奇妙なのは、正規分布ではなくポアソン分布であるということです。誰もがそのような理由を知っている人はいますか?:P
ページマン2009

@pageman:その理由は、各イベントがランダムに分散され、かつ各イベントが無限空間から取得されるためです。-軸で赤に向かって運転している車の数と時間があるように、赤に向かって運転している車の数を計算すると、同様の分布が得られます。
レオ・レオポルド・ヘルツ준 영

個人的には、ベンフォードの法則のほうが好きです:en.wikipedia.org/wiki/Benford%27s_law
Kitson

2
私は何年間も120の可変文字を使用しました。実世界のロジックでは、誰かが320 varcharフィールドに入力する準備ができていても...待機しているだけの40文字の代替メールがあると思います
違いない

17

使うだけ varchar(50)。長いメールは毎回がらくたです。

50文字の長さを見てください。

peoplewithanemail @ ddressthislongjustuseashorterone

255文字のメールを許可する場合:

  • それらを表示すると、UIがめちゃくちゃになる可能性があります(せいぜい、切り取られ、最悪の場合、コンテナーとマージンが押し出されます)。
  • 悪意のあるユーザーが予期しないことを実行できる(ハッカーが無料のオンラインAPIを使用して大量のデータを保存した場合など)

(統計によると、正当なメールアドレスに実際に50文字を超える文字を入力した人はいません。例:pagemanの回答https://stackoverflow.com/a/1199245/87861


5
完全に同意する。彼らの正しい心の誰がもはやメールアドレスを持っているでしょうか?確かに、電子メールは320文字になる可能性があることは理論的には正しいのですが、現実の世界では?私のシステムではvarchar(50)も使用しており、ユーザーが登録できないという不満は一度もありません。
Norbert Norbertson 2016

2
巨大なデータセットから、実際の電子メールの平均の長さ、外れ値、およびその大きさを知ることは興味深いでしょう。
Norbert Norbertson 2016

4
違う。電子メールに50文字を超える実際のユーザーはたくさんいますが、さらに重要なのは、自分のためだけに変更することはできないということです。修正できないものへのアクセスを拒否するのは不当です。
マーカスダウニング、

2
もちろん、彼らは新しいメールを作ることができます。グーグルのものを作る。
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エラッタ1003は次のように述べています。

ただし、256文字のMAILコマンドとRCPTコマンドのアドレスの長さについては、RFC 2821に制限があります。これらのフィールドに収まらないアドレスは通常役に立たないため、アドレス長の上限は通常256と見なされます。

そしてRFC 5321セクション4.5.3.1.3から

4.5.3.1.3。道

リバースパスまたはフォワードパスの最大合計長は256オクテット(句読点と要素の区切り文字を含む)です。

これには開始ブラケットと終了ブラケットが含まれているので、254オクテットしか使用できませんの電子メールアドレス。

ただし、オクテットの数は文字の数とは異なる場合があることに注意してください(1つの文字に2つ以上のオクテットがある場合があります)。また、RFCセクション4.5.3.1は、最大値を超えるフィールドが存在する可能性があると記載されていますが、これは可能ですが、サーバーがそれらを正しくキャッチすることは保証されていません。

そして、あなたは/する必要があります VARCHAR(254)メールアドレスを保存するます。

注:MySQLではVARCHAR、255オクテット以下として宣言された列はすべて1 byte + length(1は長さを格納するため)として格納されるため、下限を使用してもスペースは確保されません。


256バイトから254バイトにどのように進むかを説明できません。これは、開始/終了の角かっこの結果であることはわかっていますが、これを回答の一部として説明する必要があります。
ギリ

2

他の人が言ったように、20より大きい方法です。256+ 64は私にとっては良さそうで、RFCに準拠しています。

データベースにこのような大きな値を設定しない唯一の理由は、パフォーマンスまたはスペースを心配している場合であり、それを行っている場合、私は99.99999999999999%でそれが時期尚早な最適化であることを確信していますます。

大きくなる。


VARCHARは、必要な文字数(および長さ)のみを格納しました。私が見る唯一の問題は、あなたが行あたり8000バイトの制限でスペースを求めて戦っている場合です。
Richard Szalay、

私は宇宙のために戦っていません。セキュリティと使いやすさのバランスを考えて戦っています。
レオ・レオポルド・ヘルツ준 영

2

CHAR(20)フィールドは、すべて使用するかどうかに関係なく、常に20文字になります。(多くの場合、末尾にスペースで埋め。)A VARCHAR(20)フィールドが取り上げるまで 20文字ですが、それ以下になる場合もあります。CHAR()の一定の幅の利点の1つは、テーブルの行にすばやくジャンプできることです。これは、その行のインデックスを計算するだけでよいためです。欠点は、スペースを無駄にすることです。

テーブルにVARCHAR(x)列がある場合、定数サイズのCHAR(x)の利点は失われます。一部の列がVARCHAR()である場合、MySQLは背後で暗黙的にCHAR()フィールドをVARCHAR()に変換したことを思い出しているようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.