SQL电子邮件字段应该多长时间?

我认识到,一个电子邮件地址可以基本上是无限的长,所以我的任何规模强加给我的varchar电子邮件地址字段将是任意的。 但是,我想知道“标准”是什么? 你们做多久了? (相同的问题名称字段…)

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

理论上的限制真的很长,但是你真的需要担心这些长的电子邮件地址吗? 如果有人不能用100个字符的电子邮件login,你真的关心吗? 我们实际上更喜欢他们不能。

一些统计数据可能会对这个问题有所了解。 我们分析了一个拥有超过1000万个Email地址的数据库。 这些地址没有被确认,所以有无效的地址。 这里有一些有趣的事实,

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

我们通过扔掉超过40个的东西来清理数据库。好消息是,没有人抱怨,但坏消息是没有多lesslogging被清除。

我过去刚刚做了255次,因为这是短暂但不是太短input的根本标准。 那个,我是一个习惯的生物。

但是,由于最大值为319,所以我会在列上执行nvarchar(320) 。 记得@

nvarchar将不会使用你不需要的空间,所以如果你只有20个字符的电子邮件地址,它将只占用20个字节。 这与一个nchar 总是占据最大的空间相反(它将空间的值填充了)。

我也使用nvarchar代替varchar因为它是Unicode的。 鉴于电子邮件地址的波动性,这绝对是一种方式。

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

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

你真的会用这样的电子邮件地址吗? 会有人吗? 当然不是。 打字太长,难以记忆。

如果您的数据库中的磁盘空间有问题,并且您不介意百万中的一个用户必须使用辅助电子邮件地址来使用您的站点,请使用50个字符:123456789.123456789.123456789@1234567890123456.com

(大多数情况下,磁盘空间不再是问题了,是吗?)

如果你真的是挂在这个,做一个用户名varchar(60),域varchar(255)。 那么你可以做域名使用的荒谬的统计数字比作为一个单一字段稍快。 如果你真的感觉到优化的话,这也将使你的SMTP服务器能够发送更less的连接/更好的批处理的电子邮件。

RFC 5321(当前SMTP规范,废止RFC2821)指出:

4.5.3.1.1。 本地部分

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

4.5.3.1.2。 域

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

这只适用于localpart @ domain,总共320个ASCII(7位)字符。

如果您打算规范化您的数据,也许通过将本地部分和域分割成单独的字段,请注意以下其他事项:

  • 称为VERP的技术可能导致自动生成邮件的全长本地部分(可能与您的用例无关)
  • 域不区分大小写; build议降低域名部分
  • localparts是区分大小写的; user@domain.com和USER@domain.com是技术上不同的地址,尽pipe在domain.com上的策略可能是将这两个地址视为等同的。 最好将本地部分的大小写折叠限制到已知要执行此操作的域。

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

我使用varchar(64)我不认为任何人都可以有更长的电子邮件

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

真的,你需要看看你有多less关心有一点额外的数据。 对我来说,大多数情况下,这不是一个担心,所以我会在保守方面犯错。 但是,如果你已经通过逻辑和准确的方式决定了你需要节约空间,那就这样做吧。 但总的来说,要保持领域的大小,生活应该是好的。

请注意,可能不是所有的电子邮件客户端都支持RFC,所以无论说什么,您都可能遇到不同的事情。