我正在办理登记表格的桌子。其中的字段/列是:
student_no(主键) 和年龄
student_no将保存固定长度为9个字符且包含8个数字和短划线的值,例如11-423685,12-537859,12-974156
我不确定是否要使用char或varchar,因为我想在使用之前了解更多有关这两种类型的信息。具体是:
这些类型中的一个或两个是否包含键盘上包含各种符号的值( - ,@,_,$,#等),就像我需要学生编号包含短划线一样?< / p>
如果我给char长度为9,那么给它一个长度为8及以下的值是无效的
需要注意的其他重要差异,如果有的话
至于年龄,如果我使用tinyint,我是否需要指定长度?或者我应该将phpMyAdmin中的长度字段留空?
注意:这实际上只是一个学校练习,其中的指示是制作一个包含14个字段的工作注册表,因此我决定暂时不使用生日以避免使用日期。
答案 0 :(得分:2)
INT不允许任何非数字格式。 VARCHAR。
然而,使用INT代表学生编号仍然更好,因为INT会导致更快的搜索。
您可以使用格式在输出中显示带有连字符的学号。数据库应以最有效的格式(未格式化的数字)存储它。
另外,我建议您使用DATE来存储birth_date,而不是数字年龄。这将防止随着时间的推移改变年龄的问题。同样,您可以计算输出的年龄。
答案 1 :(得分:2)
CHAR()
很奇怪。它是一个固定长度的字符串,如果您尝试将其设置为较短的值,则使用空格填充。它几乎从不适合使用 - 如果你忘记它曾经存在过,你可能永远不会错过它。
VARCHAR()
很大程度上取决于你的期望。它可以包含任何字符串(包含任何字符),直到最大长度。
不要存储年龄。存储出生日期(使用类似DATE
的类型)。但是如果你必须存储一个年龄,数字类型的长度(如TINYINT
)几乎没有意义,应该留空。