2009-02-19 238 views
7

用於公用數據庫字段的大小,如firstName,lastName,Email,password等等?我在很多博客,論壇,電子商務等數據庫中看到了這些常見字段。但我不知道是否有一些參考或默認的常用字段的大小。所以,我想知道你用於選擇常用字段大小的方法/參考/基礎。數據庫字段的默認大小

+0

請參閱:http://stackoverflow.com/questions/512614/what-are-the-recommended-database-column-sizes-for-names/ – PartialOrder 2009-02-19 03:51:55

回答

12

部分取決於您的DBMS。有些像MySQL 5一樣關心VARCHAR(n)列的長度,而不是無限長度的TEXT列;其他人,如PostgreSQL,認爲TEXT和VARCHAR(n)在內部是相同的,除了在VARCHAR(n)列上檢查長度。在PostgreSQL中寫入類似VARCHAR(65536)的東西很愚蠢;如果你想要一個無限長的列,選擇TEXT並完成它。

當然,有時試圖存儲太長的值會破壞您的佈局,或者允許某人通過選擇不帶空格的長名稱來濫用系統(例如)。通常,我對用戶名字段所做的操作只是選擇一個較長的長度,以便任何想要更長用戶名的用戶都試圖造成麻煩; 64個字符是一個不錯的回合值,似乎運作良好。對於真實姓名和地址(不像用戶名那樣經常向用戶顯示),你會想要更長的時間。你需要一個足夠大的值,它可以接受任何有效的輸入,但不會太大,以至於有人可能會在域中填充一個千兆字節的字符串來攻擊你的系統。 1024個字符是相當合理的:1k是足夠小的文本容易​​使用,一個整數,並且大於任何理智的地址行或名稱。

電子郵件地址可以,每個相關的RFC,我現在懶得查找的編號不超過320個字符。所以這是你的電子郵件字段的長度。 原來,SMTP限制字段的長度爲256個字符;由於電子郵件地址必須放在括號內,最長的有效電子郵件地址實際上是254個字符。 (This page更詳細。)所以您的電子郵件字段長度。

密碼應NEVER被存儲在純文本,這樣您的密碼字段應該是一個字節數組或BLOB類型恰好足夠長的時間來存儲您所使用的哈希函數的輸出(或最大元素的密碼組在使用中,用於更高級的方案,如SRP-6a)。

+5

只有程序員認爲64是一個「很好的回合值」:) – 2009-02-19 03:32:43

+1

你知道嗎,我讀過「nice round value」這一行,並沒有想到它,直到你提到它。 :-) – 2009-02-19 03:38:42

+1

這對於我們三個人來說,我什至都沒有想過,事實上,我對自己說:「如果你想要一個更大的領域,64是一個不錯的數字,甚至可能是128,」我和我該死的編程思維模式 – UnkwnTech 2009-02-19 03:43:41

1

我傾向於做的是想想一個字段的價值可能會持續多長時間,然後加倍以保證安全。

E.g.名稱:VARCHAR(70) 電子郵件:VARCHAR(200)

2

我喜歡16,32,64,128,或256

1

雙您的估計。然後加倍讓它們適應unicode。

有varchars(幾乎所有做)的數據庫對於被設計爲保存較長值但不保留的字段會產生很小的懲罰。你可以使用它來你的優勢。

1

試着想一想:我已經使用現有的數據來獲得合理的字段長度。假設你有機會獲得一個良好的中小型數據庫充滿了真實的數據,快速查詢,如:

SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase 

會給你你需要的一切。

更新:不要使用你得到的數字。顯然,除非你有一個非常大的樣本集,否則取決於你的不確定性來填充它。