用于SQL Server中电子邮件地址的NVARCHAR(?)

tug*_*erk 11 sql sql-server email nvarchar sql-server-2008-r2

对于电子邮件地址,我应该为SQL Server中的列提供多少空间.

我在维基百科上找到了这个定义:

http://en.wikipedia.org/wiki/Email_address

电子邮件地址的格式是local-part @ domain,其中local-part长度最多为64个字符,域名最多可以包含253个字符 - 但前向或反向路径的最大256个字符长度限制了整个电子邮件地址不超过254个字符

还有这个:

http://askville.amazon.com/maximum-length-allowed-email-address/AnswerViewer.do?requestId=1166932

因此,目前,电子邮件地址允许的总字符数为64(本地部分)+ 1("@"符号)+ 255(域部分)= 320

将来他们可能会将本地部分限制增加到128个字符.这将使总共384个字符.

有什么想法吗?

Aar*_*and 14

我总是根据你后面的计算使用320.它不会花费你任何东西来允许更多*,除非人们滥用它并在那里填充垃圾.如果他们拥有合法的更长的电子邮件地址,你会有一个令人沮丧的用户,现在你将不得不返回并更新架构,代码,参数等,这可能会让你花费更少的钱.在我曾经工作过的系统中与(一个电子邮件服务提供商),我遇到的最长的电子邮件地址自然是大约120个字符 - 很明显他们只是为一个笑容制作一个长电子邮件地址.

*并非严格来说,因为内存授予估计是基于变宽列的半填充的假设,因此存储相同数据的更宽列可能导致某些查询的性能特征大不相同.

我一直在争论是否NVARCHAR有必要使用电子邮件地址.我还没有看到一个带有Unicode字符的电子邮件地址 - 我知道标准支持它们,但是现有的许多系统都没有,如果那是你的电子邮件地址,那将是非常令人沮丧的.

虽然NVARCHAR成本增加了一倍,但SQL Server 2008 R2可以从Unicode压缩中受益,它基本上将列中的所有非Unicode字符NVARCHAR视为ASCII,因此您可以获得这些额外的字节.当然压缩仅适用于Enterprise + ...

减少空间需求的另一种方法是对所有观察到的域名使用中央查找表,并存储LocalPartDomainID与用户一起存储每个唯一域名一次.是的,这使得编程更繁琐,但如果您有80,000个hotmail.com地址,则成本为80,0000 x 4字节而不是80,000 x 11字节(或压缩时更少).如果存储或I/O是您的瓶颈,而不是CPU,这绝对是一个值得研究的选择.

我在这里写到了这个:

http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/

  • 仅供参考:ASP.NET成员资格提供程序使用"nvarchar(256)"为电子邮件字段创建数据库"AspNetUsers". (2认同)