代码之家  ›  专栏  ›  技术社区  ›  Léo Léopold Hertz 준영

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

  •  77
  • Léo Léopold Hertz 준영  · 技术社区  · 15 年前

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

    EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 
    

    然而, John Saunders 使用 VARYING(256) .

    这表明我不一定正确理解变化。

    我的理解是,在我的例子中,电子邮件地址的长度是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个字符的电子邮件地址。

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

    8 回复  |  直到 6 年前
        1
  •  118
  •   Iain Hoult    10 年前

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

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

    本地部分不能超过64个字符,域部分不能超过255个字符。

    电子邮件地址的本地+@+域部分的组合长度不能超过254个字符。如上所述 RFC3696 Errata ID 1690 .

    I got the original part of this information from here

        2
  •  53
  •   Rosdi Kasim    7 年前

    Ask Metafilter :

    我的数据来自323个数据库 地址。分布有一些 高端异常值 (正偏斜)。它通常是 无异常值分布(i 测试它。)

    最小值:12 1/4:19平均值(W/ 异常值):23.04平均无异常值): 22.79第三个四分位数:最大26(w/outliers):最大47(w/o outliers):35

    中位数:23模式:24标准偏差(W/ 异常值):5.20标准偏差(w/o 离群值: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/ 那么你的电子邮件地址肯定是离群的:)

    这里是 What is the maximum safe length of an email address to allow in a website form? 在平均值稍有不同的Raycon上(n=50496,平均值=23):

    Email address length distribution

        3
  •  17
  •   Dan Diplo    15 年前

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

    阅读适当的 RFC specification :

    “电子邮件地址的本地部分 可能长达64个字符,并且 域名的最大值为 “255字”

        4
  •  15
  •   MGOwen    6 年前

    只使用 varchar(50) . 每次发送更长的邮件都是废话。

    看看50个字符有多长:

    有电子邮件@address的人,这是longjustuseashortrone

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

    • 显示它们会弄乱你的用户界面(最多会被切断,最坏的情况下会把你的容器和页边空白推开),以及
    • 恶意用户可以用他们做你无法预料的事情(比如黑客使用免费的在线API存储大量数据的情况)

    (统计数据显示,没有人实际输入超过50个字符的合法电子邮件地址,请参见:pageman's answer https://stackoverflow.com/a/1199245/87861 )

        5
  •  2
  •   Stu Thompson Helter Scelter    15 年前

    正如其他人所说,远远大于20。256+64听起来不错,符合RFC。

    不为您的数据库提供如此大的值的唯一原因是,如果您担心性能或空间,并且如果您这样做,那么我是99.9999999999%,这是肯定的。 过早优化 .

    走大一点。

        6
  •  2
  •   VoidPointer    15 年前

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

    中的本地部分和域名的长度没有限制 RFC-2822 . RFC-2181 但是,域名限制为255个八位字节/字符。

    再一次,因为 瓦卡尔 只使用存储字符串实际使用的空间,没有理由对电子邮件地址长度进行小限制。只要用512,就不用担心了。其他都是 premature optimization

        7
  •  2
  •   PhoneixS Oskar Dajnowicz    10 年前

    最初最多320个字符(64+1+255,如其他答案所示),但 RFC 3696 Errata 1003 说:

    但是,在RFC2821中对 在256个字符的mail和rcpt命令中的地址。自地址以来 不适合这些领域的通常是不有用的,上层 地址长度的限制通常应视为256。

    RFC 5321 部分 4.5.3.1.3 :

    4.5.3.1.3。路径

    反向路径或正向路径的最大总长度为256 八位字节(包括标点和元素分隔符)

    这包括左括号和右括号,因此我们只能 254八位字节 电子邮件地址。

    但要记住,八位字节的数目可能不等于字符的数目(一个字符可能有2个或更多的八位字节)。也 RFC section 4.5.3.1 告诉您可能有更多的字段是最大值,这是可能的,但不能保证服务器能够正确捕获它们。

    然后你可以/必须使用 VARCHAR(254) 存储电子邮件地址。

    注意:在MySQL中,至少有一列声明为 VARCHAR 小于或等于255个八位字节将全部存储为 1 byte + length (1用于存储长度),因此如果使用下限,则不会获得空间。

        8
  •  0
  •   Stig Brautaset    15 年前

    不管是否全部使用,char(20)字段都将占用20个字符。(通常在末尾用空格填充)varchar(20)字段将占用 高达 20个字符,但可能占用更少。char()的常量width的一个好处是可以快速跳转到表中的一行,因为您只需计算它必须打开的索引。缺点是浪费空间。

    如果表中有任何varchar(x)列,则常量大小char(x)的好处将丢失。我似乎还记得,如果某些列是varchar()s,那么mysql会在幕后悄悄地将char()字段转换为varchar()。