私はいつも使用していVARCHAR(320)
ます。その理由は次のとおりです。標準では、次の制限が規定されています。
- 「ローカル部分」(ユーザー名)の64文字。
@
シンボルに1文字。
- ドメイン名に255文字。
さて、それ以上をサポートする必要があると言う人もいるでしょう。ドメイン名にUnicodeをサポートする必要があると言う人もいます(つまり、に切り替える必要がありますNVARCHAR
)。規格はその間に変更される可能性がありますが(ゲームにスキンを付けてからしばらく経ちました)、この時点で世界中のほとんどのサーバーがUnicode電子メールアドレスを受け入れないことを確信しています。多くのサーバーでは、320文字を超えるアドレスの作成や受け入れに問題が発生します。
とはいえ、必要に応じて最悪の事態に備えることができます(SQL Server 2008 R2以降でデータ圧縮を使用している場合は、Unicode圧縮のメリットがあります。つまり、実際に必要な文字に対して2バイトのペナルティのみを支払うということです。それ)。このようにして、列を好きなだけ広げることができ、長すぎるジャンクを好きなように詰めることができます-ジャンクを与えない場合は、電子メールを受信しません挿入が失敗した場合、電子メールを受信します。あなたは、中に無効なジャンクを許可すれば問題がありますそれに対処する必要があります。そして、あなたがそれをどんなサイズにしても、誰かが400文字を320文字の列に詰め込もうとすると、誰かが1025文字を1024文字の列に詰め込もうとします。賢明な人がシステム境界を明示的にテストするためにそれを使用している場合を除き、賢明な人が320文字を超える電子メールアドレスを持っている必要はありません。
しかし、これに関する意見を求めるのをやめてください-そして、ガイダンスのために他の実装を見るのをやめてください(あなたが参照したものが自分の宿題をすることを気にせず、彼らから数字を選んだだけです) 。標準に直接アクセスできます。最新バージョンを参照し、最低限サポートするようにしてください。また、仕様の変更に適応できるように、標準を維持してください。
EDITは感謝チャットでのpingのため@ypercubeします。
余談ですが、そもそもアドレス全体を1つの列にダンプしたくないでしょう。正規化により@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として再利用できる場合、電子メールアドレスの長さの人為的により低い制限を持つテーブルを作成しますか?