2012-12-02 32 views
2

我正在爲註冊表格工作。中它的字段/列是:關於char varchar和tinyint的問題

student_no(主鍵) 和年齡

的student_no會認爲具有包含8個數字和破折號,例如11-423685 9個字符的固定長度的值, 12-537859,12-974156

我不確定是否使用char或varchar,因爲我想在使用它們之前知道更多關於這兩種類型的信息。具體做法是:

  1. 可以將一個或這兩種類型的持有價值,其中包括鍵盤上的各種符號( - ,@,_,$,#等),怎麼樣,我需要的學生數包含短跑?

  2. 如果我給燒焦的9長度這將是無效的,給它的長度8及以下

  3. 重要差異值要注意,如果有

作爲年齡,如果我使用tinyint,是否需要指定長度?或者我應該只留下phpMyAdmin中的長度字段爲空?

注意:這實際上只是一個學校練習,其中的指令是要在任何十四個字段中創建一個工作註冊表,所以我決定現在不使用生日來避免使用日期。

+0

所有的答案都在這裏回答.... http://dev.mysql.com/doc/refman/5.0/en/char.html –

+0

關於你的評論[你在這裏刪除的問題](http:// stackoverflow.com/q/13902078/425275),'
'和''是空元素,所以它們不需要結束標記或'/';只要在我寫在這裏的時候寫下來。你應該使用的doctype是'<!doctype html>'。 –

回答

2

INT不允許任何非數字格式。 VARCHAR的確如此。

但是,使用INT來表示學生號碼更好,因爲INT會導致更快的搜索。

您可以使用格式設置在輸出上顯示帶有連字符的學號。數據庫應該以最有效的格式存儲它(一個未格式化的數字)。

此外,我建議你使用日期來存儲birth_date,而不是一個數字時代。隨着時間的推移,這將防止隨年齡變化的問題。再次,您可以計算演示文稿的年齡。

+0

所以如果我需要包括破折號,我應該使用varchar? – ransan32

+0

同樣,您可以在保存號碼之前刪除短劃線,並在檢索後將其添加回來,這正是我的建議。但是,如果你堅持在數據庫中使用連字符,那麼你必須使用varchar。 –

+0

或者,如果可能的話,考慮將11和423685存儲在單獨的列中,特別是如果它們具有語義含義。 – jmilloy

2

CHAR()很奇怪。它是一個固定長度的字符串,如果嘗試將其設置爲較短的值,則會填充空格。使用幾乎是不合適的 - 如果你忘記曾經存在過,你可能永遠不會錯過它。

VARCHAR()很大程度上符合您的期望。它可以包含任何字符串(包含任何字符),直到其最大長度。

不要存儲年齡。存儲出生日期(使用類型如DATE)。但是如果你必須存儲一個年齡,數字類型的長度(如TINYINT)幾乎沒有意義,應該留空。