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

时间:2009-08-19 00:22:51

标签: sql varchar convention

我认识到电子邮件地址基本上可以无限长,因此我在varchar电子邮件地址字段上施加的任何大小都是任意的。但是,我想知道“标准”是什么?你们有多长时间制作它? (姓名字段的相同问题......)

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

8 个答案:

答案 0 :(得分:155)

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

一些统计数据可能会对这个问题有所了解。我们分析了一个拥有超过1000万个电子邮件地址的数这些地址未得到确认,因此存在无效地址。以下是一些有趣的事实,

  1. 最长的有效期是89。
  2. 在我们的专栏(255)的限制之内有数百个较长的,但它们显然是通过视觉检查伪造的。
  3. 长度分布的峰值为19。
  4. 没有长尾巴。 38后,一切都急剧下降。
  5. 我们通过丢弃超过40的任何东西来清理数据库。好消息是没有人抱怨,但坏消息是没有很多记录被清除。

答案 1 :(得分:16)

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

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

nvarchar将不会使用您不需要的空间,因此如果您只有20个字符的电子邮件地址,则只占用20个字节。这与nchar相反,总是占用它的最大值(右边用空格填充值)。

我还会使用nvarchar代替varchar,因为它是Unicode。鉴于电子邮件地址的波动性,这绝对是可行的方法。

答案 2 :(得分:8)

以下电子邮件地址仅为94个字符:

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

  • 组织实际上会给你一封很长的电子邮件吗?
  • 如果他们足够愚蠢,你真的使用这样的电子邮件地址吗?
  • 任何人吗?当然不是。打字太长,难以记住。

即使是一位92岁的技术人员也会想出如何注册一个不错的短邮件地址,只需使用它,而不是在注册页面中输入。

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

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

我喜欢50个字符:

123456789.123456789.123456789@1234567890123456.com

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

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

答案 3 :(得分:4)

如果你真的是它的挂片,请创建一个用户名varchar(60),域varchar(255)。然后,您可以对域使用进行荒谬的统计,这比单个字段的速度要快一些。如果您对优化感到非常不满,那么这也将使您的SMTP服务器能够以更少的连接/更好的批处理发送电子邮件。

答案 4 :(得分:3)

RFC 5321(当前的SMTP规范,废弃RFC2821)声明:

  

4.5.3.1.1。本地部分

     

用户的最大总长度   名称或其他本地部分是64
  八位位组。

     

4.5.3.1.2。域

     

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

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

如果您计划规范化数据,可能将localpart和domain拆分为单独的字段,请记住以下内容:

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

答案 5 :(得分:3)

根据这篇文章,基于适当的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   用户名字符+域名+ 1的255个字符   @符号的字符)。其他来源显示129(64 + 1 + 64)   或384(128 + 1 + 255,假设用户名长度翻倍   未来的)。

     

这种混乱意味着你应该注意'稳健性原则'   (“开发人员应该仔细编写与之密切相关的软件   现存的RFC,但接受并解析来自可能不存在的对等体的输入   与那些RFC一致。“ - 维基百科”在编写软件时   处理电子邮件地址。此外,某些软件可能会瘫痪   通过天真​​的假设,例如认为50个字符就足够了   (例子)。您的200个字符的电子邮件地址可能在技术上有效   但如果大多数网站或应用程序拒绝它,那对你没有帮助。

     

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

     

“RFC 3696的原始版本确实说320是最大值   但是John Klensin(ICANN)随后接受了这一点   错“。

     

“这源于域的最大长度的简单算法   (255个字符)+邮箱的最大长度(64个字符)+ @   符号= 320个字符。错误。实际记录了这个芥末   RFC3696的原始版本。它在勘误表中得到纠正。   实际上RFC5321对路径元素的限制   SMTP事务256个字符。但这包括有角度的括号   在电子邮件地址周围,所以电子邮件地址的最大长度是   254个字符。“ - Dominic Sayers

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

真的,你需要看看你有多少关心有一些额外的数据。对我来说,主要是,这不是一个担心,所以我会在保守的方面犯错。但是,如果您通过逻辑和准确的方式决定,您需要节省空间,那么就这样做。但总的来说,对于场地大小保守,生活应该是好的。

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