数据库中电子邮件地址的最佳长度是多少?

Léo*_* 준영 85 database email performance database-design

这是我查询的提取部分,反映了EMAIL_ADDRESS列数据类型和属性:

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 
Run Code Online (Sandbox Code Playgroud)

但是,约翰桑德斯使用VARYING(256).

这表明我没有必要正确理解变化.

据我所知,在我的情况下,电子邮件地址的长度为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)
  );
Run Code Online (Sandbox Code Playgroud)

我从未见过普通人使用的超过20个字符的电子邮件地址.

数据库中电子邮件地址的最佳长度是多少?

Iai*_*ult 128

电子邮件地址的最大长度为254个字符.

每个电子邮件地址由两部分组成."@"符号前面的本地部分以及后面的域部分.在"user@example.com"中,本地部分是"user",域部分是"example.com".

本地部分不得超过64个字符,域部分不得超过255个字符.

电子邮件地址的本地+ @ +域部分的总长度不得超过254个字符.如RFC3696勘误表ID 1690中所述.

我从这里得到了这些信息的原始部分

  • 我知道这是一个旧线程,并且使用320没有问题,但实际最大值为254,因为RFC2821的压倒一切的限制超出了本地和域部分引用的额外约束.如果存储空间是一个问题,这可能值得人们知道他们是否偶然发现这个线程.参见[勘误表至RFC3696]中的勘误表ID 1690(http://www.rfc-editor.org/errata_search.php?rfc=3696) (39认同)
  • 特别是如果您希望电子邮件字段具有唯一约束;在INNODB和utf8下,varchar(254)足够小(小于767bytes)以具有唯一约束,而varchar(300)则不是。 (2认同)

pag*_*man 55

来自Ask Metafilter:

我的数据来自323个地址的数据库.该分布具有一些高端异常值(正偏态).它通常是在没有异常值的情况下分发的(我测试过它.)

最小值:12第1四分位数:19平均值(带异常值):23.04平均值不等于异常值):22.79第3四分位数:26最大值(带异常值):47最大值(不含异常值):35

中位数:23模式:24标准.Dev(带异常值):5.20标准.开发(不含异常值):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):

电子邮件地址长度分布

  • 多年来我使用了120个变量字符.现实世界的逻辑是,即使有人准备填补你的320 varchar字段...我打赌他们有一个40字母替代电子邮件只是站在旁边 (2认同)

Dan*_*plo 16

我的工作电子邮件地址超过20个字符!

阅读相应的RFC规范:

"电子邮件地址的本地部分最长可达64个字符,域名最多可包含255个字符"


Nic*_*ini 15

只是用varchar(50).每次都会发送更长的电子邮件.

看看50个字符有多长:

peoplewithanemail @ ddressthislongjustuseashorterone

如果您允许255个字符的电子邮件:

  • 显示它们会弄乱你的用户界面(最多它们会被切断,最糟糕的是它们会推动你的容器和边缘)和
  • 恶意用户可以使用您无法预料的事情(例如黑客使用免费在线API存储大量数据的情况)

(统计显示,对于合法的电子邮件地址,实际上没有人输入超过50个字符,请参阅例如:pageman的答案/sf/answers/83947181/)

  • 另外,不要忘记加号。一些高级用户正在使用它来隔离和组织收件箱中的电子邮件。本质上,他们每个网站/服务/应用程序都会有一个唯一的(子)电子邮件。例如,假设我的普通电子邮件是我在某个公司名称中的名字和姓氏:firstnameandlastone@superacmecompany.com。已经有大约 40 个字符了。现在,如果我对 stackoverflow 帐户使用加号:firstnameandlastone+stackoverflow@superacmecompany.com——大约有 55 个字符。有些加号可能会更长,例如+stackoverflow-personal 和*-work。 (6认同)
  • 完全同意.谁心智正常会再有一个电子邮件地址?当然,从理论上说,电子邮件可以是320个字符但在现实世界中是正确的吗?在我的系统中,我也使用varchar(50),我从未抱怨用户无法注册. (5认同)
  • 从大型数据集中了解平均真实世界电子邮件长度是多少以及异常值是多少以及有多大. (2认同)
  • 错误.有很多真实世界的用户在他们的电子邮件中有超过50个字符,更重要的是他们不能仅仅为你改变它.拒绝他们访问他们无法修复的东西是不公平的. (2认同)
  • 他们当然可以制作新的电子邮件。使谷歌之一。 (2认同)

Voi*_*ter 5

数据库中的可变字符类型不会占用不需要的空间。因此,没有理由尽可能地限制这些字段。根据人名、组织使用的命名方案和域名,一个地址很容易超过 20 个字符。

RFC-2822 中对 local-part 和 domain-name 的长度没有限制。不过,RFC-2181将域名限制为 255 个八位字节/字符。

同样,由于varchar仅使用您存储的字符串实际使用的空间,因此没有理由对电子邮件地址长度设置一个小的限制。只需使用 512 即可,无需担心。其他一切都是过早的优化