2

我正在准备一张注册表单。它的字段/列包括:

student_no(主键)和年龄

student_no 将保存具有 9 个字符的固定长度的值,其中包含 8 个数字和一个破折号,例如 11-423685、12-537859、12-974156

我不确定是使用 char 还是 varchar,因为我想在使用它们之前更多地了解这两种类型。具体来说:

  1. 这些类型中的一种或两种是否可以保存包含键盘上各种符号(-、@、_、$、# 等)的值,例如我如何需要学生编号包含破折号?

  2. 如果我给 char 的长度为 9,给它一个长度为 8 及以下的值是否无效

  3. 其他需要注意的重要区别(如果有)

至于年龄,如果我使用tinyint,是否需要指定长度?还是我应该将 phpMyAdmin 中的长度字段留空?

注意:这实际上只是一个学校练习,其中的指令是制作一个包含任何十四个字段的工作注册表,所以我决定暂时不使用生日以避免使用日期。

4

2 回答 2

2

INT 不允许任何非数字格式。VARCHAR 可以。

但是,最好使用 INT 来表示学号,因为 INT 会加快搜索速度。

您可以使用格式在输出时显示带有连字符的学生编号。数据库应该以最有效的格式(未格式化的数字)存储它。

另外,我建议您使用 DATE 来存储birth_date,而不是数字年龄。这将防止随着时间的推移发生年龄变化的问题。同样,您可以计算输出的年龄以进行演示。

于 2012-12-02T01:59:35.827 回答
2

CHAR()很奇怪。它是一个固定长度的字符串,如果您尝试将其设置为较短的值,则会用空格填充。它几乎不适合使用——如果你忘记它曾经存在过,你可能永远不会错过它。

VARCHAR()很大程度上按照您的预期工作。它可以包含不超过其最大长度的任何字符串(带有任何字符)。

不要储存年龄。存储出生日期(使用类似的类型DATE)。但是如果你必须存储一个年龄,数字类型(如TINYINT)的长度几乎没有意义,应该留空。

于 2012-12-02T02:00:26.180 回答