2009-08-19 19 views
67

我認識到,一個電子郵件地址可以基本上無限長,所以我強加給我的varchar電子郵件地址字段的任何大小將是任意的。但是,我想知道「標準」是什麼?你們做了多久? (對於名稱字段相同的問題...)SQL電子郵件字段應該多長時間?

更新:顯然爲電子郵件地址的最大長度是320(< = 64名部分,< = 255結構域)。你用這個嗎?

+1

什麼RFC你用這些值嗎? – IDisposable 2009-08-19 00:26:37

+7

http:// stackoverflow。com/questions/386294 /最大長度有效電子郵件ID – Mala 2009-08-19 01:25:30

回答

128

理論上的限制真的很長,但您真的需要擔心這些長的電子郵件地址嗎?如果有人不能使用100個字符的電子郵件登錄,你真的關心嗎?我們實際上更喜歡他們不能。

一些統計數據可能會對這個問題有所瞭解。我們分析了超過1000萬個電子郵件地址的數據庫。這些地址未被確認,因此存在無效地址。這裏有一些有趣的事實,

  1. 最長有效期一種是89
  2. 有數百個較長的達到我們的列(255)的限制,但它們是通過目測顯然是假的。
  3. 長度分佈的峯值爲19.
  4. 沒有長尾巴。一切後,38

我們通過丟棄任何超過40長的好消息是,沒有人抱怨,但壞消息是不是多條記錄得到了清理清理DB大幅下降。

+23

謝天謝地了一些常識?每個人都說「讓它320!」請*,請*輸入一個320個字符的電子郵件地址,仔細查看它,並問問自己世界上的任何人是否會在您的應用中使用這樣的地址。 – MGOwen 2010-10-25 03:02:31

+8

40?猜猜你是在一個正式討厭Facebook代理電子郵件的開發者俱樂部(a.k.a - [email protected]ymail.facebook.com)。我實際上鼓吹了90的大小......有趣的是,它在你的名單上排名第一。 – kape123 2012-04-20 07:06:14

+1

取決於電子郵件的用途。如果是用戶,我同意,40,也許50是足夠的。我只是做了一個測試,發現大部分都在17到25之間。很少超過40個。 – 2013-03-08 15:58:24

15

我過去剛做了255次,因爲這是短暫的但不是太短輸入的根深蒂固的標準。那,我是一個習慣的生物。

但是,由於最大值是319,所以我會在列上做nvarchar(320)。記得@

nvarchar將不會使用您不需要的空間,所以如果您只有20個字符的電子郵件地址,它將只佔用20個字節。這與nchar相反,其將總是佔據其最大值(它用空格填充該值)。

因爲它是Unicode,所以我也使用nvarchar代替varchar。考慮到電子郵件地址的波動性,這絕對是一種方式。

+2

255 + 64 = 319,320正在計算@ – Havenard 2009-08-19 00:27:59

+0

我使用phpMyAdmin來設置數據庫,並且我沒有看到nvarchar任何地方......我是否需要用SQL語句手動設置它,還是我只是在某處丟失它? – Mala 2009-08-19 01:50:51

+5

thisemailaddressisonly160charslong-[email protected]butuserswithnoemailaddressunder100charswillNEVERbeanissue.com – MGOwen 2010-10-25 03:16:49

4

如果你確實在做這件事,可以使用username varchar(60),domain varchar(255)。然後,您可以對域使用情況做出荒謬的統計數據,這比將數據作爲單個字段稍微快一點。如果你真的感覺到優化,那麼這也將使你的SMTP服務器能夠用更少的連接/更好的批量發送電子郵件。

+0

S /槍豪/賣力/ – jameshfisher 2013-03-04 22:47:10

+4

S /長庚浩?(?:\ S *約)/獻給/ – 2013-03-12 13:50:37

0

對於電子郵件,不管規範如何,我幾乎總是用512(nvarchar)。名字和姓氏是相似的。

真的,你需要看看你有多少關心有一點額外的數據。對我來說,大多數情況下,這不是一個擔心,所以我會在保守方面犯錯。但是,如果您已經通過邏輯準確的方式決定需要節約空間,那就這樣做。但總的來說,保守的野外大小,生活應該是好的。

請注意,可能並非所有的電子郵件客戶端都支持RFC,因此不管它說什麼,您都可能在野外遇到不同的事情。

5

以下電子郵件地址是唯一的94個字符:

[email protected]ngCompanyNameOfSomeKind.com.au

你會真正使用這樣的電子郵件地址? 會有人嗎?當然不是。輸入時間太長,難以記憶。

如果數據庫中的磁盤空間有問題,並且您不介意百萬中的某個用戶必須使用輔助電子郵件地址來使用您的站點,請使用50個字符: [email protected]。 (大多數情況下,磁盤空間不再是問題了,是不是?)

3

RFC 5321(當前SMTP屬,淘汰了RFC2821)規定:

4.5.3.1.1。本地部分

用戶名稱或其他本地部分的最大總長度爲64
八比特組。

4.5.3.1.2。 Domain

域名或號碼的最大總長度爲255個八位字節。

這隻適用於localpart @ domain,總共320個ASCII(7位)字符。

如果計劃一定要規範你的數據,也許分裂的localpart和域成單獨的領域,更多的事情要記住:

  • 稱爲VERP的技術可能會導致全長localparts自動生成的郵件(可能與您的用例無關)
  • 域不區分大小寫;建議降低域名部分
  • localparts區分大小寫; [email protected][email protected]是技術上不同的地址,儘管domain.com 的策略可能是將這兩個地址視爲等效。最好將本地部分大小寫摺疊限制爲已知要執行此操作的域。
1

我使用VARCHAR(64)我不認爲任何人都可以有較長的電子郵件

相關問題