我正在为一个注册表表工作。它的字段/列包括:
student_no(主键)和年龄
student_no将包含固定长度为9个字符的值,其中包含8个数字和一个短划线,例如11-423685、12-537859、12-974156
我不确定是使用char还是varchar,因为我想在使用它们之前了解更多关于这两种类型的信息。特别是:
-
这两种类型中的一种或两种是否都可以包含键盘上包括各种符号(-、@、_、$、#等)的值,比如我需要学生号来包含短划线?
-
如果我给char的长度是9,那么给它一个长度为8且低于的值是无效的吗
-
需要注意的其他重要差异(如果有)
至于年龄,如果我使用tinyint,是否需要指定长度?还是应该将phpMyAdmin中的长度字段留空?
注意:这实际上只是一个学校练习,指导是制作一份包含任何14个字段的工作登记表,所以我决定暂时不使用生日,以避免使用日期。
INT不允许任何非数字格式。VARCHAR做到了。
然而,最好使用INT来表示学生人数,因为INT会导致更快的搜索。
您可以使用格式在输出中使用连字符显示学生编号。数据库应该以最有效的格式(未格式化的数字)存储它。
此外,我建议您使用DATE来存储出生日期,而不是数字年龄。这将防止随着时间的推移而更改年龄的问题。同样,您可以计算演示文稿输出的年龄。
CHAR()
很奇怪。它是一个固定长度的字符串,如果您试图将其设置为较短的值,则会用空格填充。它几乎从来都不适合使用——如果你忘记了它的存在,你可能永远不会错过它
VARCHAR()
在很大程度上按照您的预期工作。它可以包含最大长度以内的任何字符串(包含任何字符)。
不要储存年龄。存储出生日期(使用类似DATE
的类型)。但是,如果必须存储年龄,那么数字类型(如TINYINT
)的长度几乎没有意义,应该留空。