2011-02-27 31 views
2

當我通過PHP登記表添加用戶信息到MySQL,有與在數據字段的限制(例如名稱是20個最多字符數,電子郵件18個字符,附加信息200,通過12個字符等)MySQL中用戶註冊表單的字段大小?

我應該在MySQL表中創建完全相同的字段,還是應該定義更長的字段?

這樣做是否有任何好處,而不僅僅是創建所有字符串字段,例如500個字符長?

將年齡存儲爲整數時,是否應該使用小整數(即最大256)?

+0

將年齡限制爲一個小的int會使您的代碼永遠不符合要求。 – 2011-02-27 19:45:06

+0

只是一個簡短的提示:你的數據庫中不應該有明文的密碼。將其存儲爲md5加密。 – DKSan 2011-02-27 19:46:00

+2

快速注意事項@DKSan:不要存儲MD5散列密碼。這不是加密,它不夠強大。使用更好的散列函數,但更重要的是使用好鹽。更重要的是,舒展它。不要以爲只有通過'md5($ password)''''''''''''''''''''更安全,因爲它只是邊緣... – ircmaxell 2011-02-27 19:51:31

回答

0

如果您使用的是MyISAM表類型,對於查詢,如果您保持記錄長度爲靜態,它將會更有效。所以如果你可以使用固定大小的char字段而不是varchar,它會更好(只要記錄中的所有字段都是靜態的)。但是,您指定的整個字符數將在內存中被屏蔽,因此您需要確定內存使用情況是否更重要。

1

一般來說,這並不重要。重要的部分是如何驗證服務器端的信息。

  1. 確保輸入的數據不超過列的大小。如果你不這樣做,你可能會遇到mysql會自動截斷數據的問題。

  2. 不要限制密碼大小。如果有人想輸入200個字符的密碼,讓他們。你應該將它存儲在a storing hash而不是純文本,所以確切的長度不應該有所作爲。

  3. 始終正確存儲您的數據類型。如果您期望整數年齡,請將其存儲在整數列中。沒有真正的理由將其存儲在字符串列類型中。

  4. 就其餘的限制而言,它實際上更依賴於應用程序。如果您希望200個字符的信息限制,然後將其存儲在VARCHAR(200)。但是,如果您只是假設,請將其存儲在TEXT類型中,以便用戶可以按自己的喜好進行輸入。但是,這更多的應用和使用情況相關的比什麼都重要......

0

除非你的應用是巨大的,你的數據庫將是巨大的,這應該的問題很少在性能方面。我想說,你應該給MySQL自己留出一些額外的空間,因爲以後更改註冊表格的最大長度比MySQL最大長度要容易得多。使用smallint的年齡是好的。或不。一般來說,你不應該讓字段佔用比他們需要的空間更多的空間,但爲了以防萬一,我會給自己一些填充。但是,再一次,它不應該有很大的區別。

1

建議您對數據庫列長度(對於您的varchar)保持寬鬆,但嚴格執行大小/長度的應用程序。

業務邏輯可能隨時間而改變。您的應用程序層將成爲這些規則的守護者和執行者。

您的數據庫不應該經常根據長度變化的業務規則進行調整。定義varchar(100)類型的列今天不會花費任何費用。長度可以變化到100,所以你的性能和存儲不會受到任何影響。

應用程序和數據庫更改/維護很昂貴;數據庫存儲很便宜。

其他一些詳細的建議,如果你會:

  • 不存儲age。通過使用數學(今天 - 出生日期)從日期(出生日期)導出它。
  • 密碼不應該存儲或有一個最大長度!
  • 所有的字符串字段 - 將它們定義爲varchar(256)1024並與它們一起完成。讓您的應用程序執行當天的業務規則。
+0

我認爲你的意思是*密碼**不應該被存儲或具有最大長度*。現在,它沒有任何意義...... – ircmaxell 2011-02-27 20:32:56

+0

@ircmax:DOH!感謝您指出該錯誤! – 2011-02-27 22:31:21