107

我认识到一个电子邮件地址基本上可以无限长,所以我对我的 varchar 电子邮件地址字段施加的任何大小都是任意的。但是,我想知道“标准”是什么?你们多久能成?(名称字段的相同问题...)

更新:显然电子邮件地址的最大长度是 320(<=64 名称部分,<=255 域)。你用这个吗?

4

8 回答 8

193

理论上的限制确实很长,但是您真的需要担心这些长电子邮件地址吗?如果有人无法使用 100 字符的电子邮件登录,您真的在乎吗?我们实际上更喜欢他们不能。

一些统计数据可能会说明这个问题。我们分析了一个包含超过 1000 万个电子邮件地址的数据库。这些地址未确认,因此存在无效地址。这里有一些有趣的事实,

  1. 最长有效的是 89。
  2. 有数百个更长的,直到我们的专栏(255)的限制,但通过目视检查它们显然是假的。
  3. 长度分布的峰值在 19 处。
  4. 没有长尾巴。38岁以后一切都急剧下降。

我们通过丢弃任何超过 40 条的东西来清理数据库。好消息是没有人抱怨,但坏消息是没有多少记录被清除。

于 2009-08-19T01:01:44.767 回答
17

我过去刚刚完成了 255,因为这是一个根深蒂固的短但不是太短的输入标准。那,我是一个习惯的生物。

但是,由于最大值是 319,我会nvarchar(320)在列上做。一定要记住@

nvarchar不会使用你不需要的空间,所以如果你只有一个 20 个字符的电子邮件地址,它只会占用 20 个字节。这与始终占据最大值的 a 形成对比(它用空格右填充值)nchar

我也会使用它nvarchar来代替它,varchar因为它是 Unicode。鉴于电子邮件地址的波动性,这绝对是要走的路。

于 2009-08-19T00:25:32.500 回答
16

以下电子邮件地址只有 94 个字符:

i.have.a.really.long.name.like.seetharam.krishnapillai@AReallyLongCompanyNameOfSomeKind.com.au

  • 一个组织真的会给你一封那么长的电子邮件吗?
  • 如果他们足够愚蠢,你真的会使用这样的电子邮件地址吗?
  • 有人吗?当然不是。打字太长,太难记。

即使是一个 92 岁的技术恐惧症患者也会想出如何注册一个漂亮的短 gmail 地址,然后直接使用它,而不是在您的注册页面中输入它。

磁盘空间可能不是问题,但至少有两个问题允许用户输入字段比他们需要的长很多倍:

  • 显示它们可能会弄乱您的 UI(最好的情况是它们会被切断,最坏的情况是它们会推动您的容器和边距)
  • 恶意用户可以用他们做你无法预料的事情(比如黑客使用免费的在线 API 来存储大量数据的情况)

我喜欢 50 个字符:

123456789.123456789.123456789@1234567890123456.com

如果百万分之一的用户必须使用他们的其他电子邮件地址来使用我的应用程序,那就这样吧。

(统计显示,实际上没有人为电子邮件地址输入超过 40 个字符,例如:ZZ Coder 的回答https://stackoverflow.com/a/1297352/87861

于 2009-08-19T00:33:23.097 回答
6

根据此文本,根据正确的 RFC 文档,它不是 320 而是 254: http ://www.eph.co.uk/resources/email-address-length-faq/

编辑:使用 WayBack 机器: https ://web.archive.org/web/20120222213813/http://www.eph.co.uk/resources/email-address-length-faq/

电子邮件地址的最大长度是多少?

254 个字符

最大有效电子邮件地址大小似乎有些混乱。大多数人认为它是 320 个字符(用户名 64 个字符 + 域 255 个字符 + @ 符号 1 个字符)。其他来源建议使用 129 (64 + 1 + 64) 或 384 (128+1+255,假设用户名将来会加倍)。

这种混淆意味着您在编写处理与电子邮件地址。此外,某些软件可能会因幼稚的假设而瘫痪,例如认为 50 个字符就足够了(示例)。您的 200 个字符的电子邮件地址在技术上可能是有效的,但如果大多数网站或应用程序拒绝它,这将无济于事。

当前的实际最大电子邮件长度为 254 个字符:

“RFC 3696 的原始版本确实说 320 是最大长度,但 John Klensin (ICANN) 随后承认这是错误的。”

“这源于域最大长度(255 个字符)+ 邮箱最大长度(64 个字符)+ @ 符号 = 320 个字符的简单算术。错误。这个谣言实际上记录在 RFC3696 的原始版本中。它已在勘误表中更正。实际上,RFC5321 对 256 个字符的 SMTP 事务的路径元素进行了限制。但这包括电子邮件地址周围的尖括号,因此电子邮件地址的最大长度为 254 个字符。- 多米尼克·塞耶斯

于 2011-07-03T07:44:49.197 回答
4

如果你真的对它持怀疑态度,请创建一个用户名 varchar(60),域 varchar(255)。然后,您可以对域使用情况进行荒谬的统计,这比将其作为单个字段执行要快一些。如果您对优化感到非常兴奋,那也将使您的 SMTP 服务器能够以更少的连接/更好的批处理发送电子邮件。

于 2009-08-19T00:28:09.070 回答
4

我使用 varchar(64) 我认为没有人可以拥有更长的电子邮件

于 2010-08-12T14:20:25.753 回答
3

RFC 5321(当前的 SMTP 规范,已废弃 RFC2821)指出:

4.5.3.1.1。局部

用户名或其他本地部分的最大总长度为 64
个八位字节。

4.5.3.1.2。领域

域名或号码的最大总长度为 255 个八位字节。

这仅与 localpart@domain 相关,总共 320 个 ASCII(7 位)字符。

如果您计划规范化您的数据,可能通过将 localpart 和 domain 拆分为单独的字段,请记住其他事项:

  • 一种称为 VERP 的技术可能会为自动生成的邮件生成完整的本地部分(可能与您的用例无关)
  • 域不区分大小写;建议将域部分小写
  • localparts 区分大小写;根据规范,user@domain.com 和 USER@domain.com 在技术上是不同的地址,尽管 domain.com 的策略可能会将这两个地址视为等效地址。最好将 localpart 大小写折叠限制在已知的域中。
于 2009-08-19T03:53:03.700 回答
1

对于电子邮件,无论规格如何,我几乎总是使用 512 (nvarchar)。姓名和姓氏相似。

真的,你需要看看你有多在乎有一点额外的数据。对我来说,大多数情况下,这不是一个担心,所以我会在保守的一面犯错。但是,如果您已通过合乎逻辑且准确的方式决定您需要节省空间,那么就这样做。但总的来说,对于字段大小要保守,生活应该很好。

请注意,可能并非所有电子邮件客户端都支持 RFC,因此无论它说什么,您都可能在野外遇到不同的事情。

于 2009-08-19T00:30:56.870 回答