MySQL数据库中的表字段设计?

5

我对一个内容管理系统的数据库进行了研究:

uid(唯一用户ID):它设置为int(11)

name(唯一用户名):它设置为varchar(60)

created(用户创建时间戳):它设置为int(11)

title文章标题,它设置为varchar(255)

1、何时应使用Int、Char、Varchar或其他类型?

2、如何设置括号中的数字。例如:varchar(60)。谢谢!

2个回答

10

当您想使用主键或计算数据时,应使用INT类型(与字符串相比,INT类型更快速地查找)。例如,您想要计算某人在网上订购产品时购买的商品数量。每行将包括文章描述、价格、订购数量(等等-这里只是举个例子)。在这种情况下,如果使用INT类型来记录数量,则可以轻松检索到已订购产品的数量(发票总共的产品数量)。

“char”和“varchar”类型的字符串略有不同。“char”类型定义如下:

固定长度字符串,存储时始终在右侧填充空格以达到指定长度。

换句话说,如果您使用char(200)定义名字,则将使用200个字节。varchar类型定义如下:

可变长度字符串。注意:存储值时会删除尾随空格(这与ANSI SQL规范不同)

换句话说,如果您使用varchar(255)定义名字,并且该名字为“Tim”,则将使用4个字节。3个字节用于名字,再加上1个字节用于字段长度。

通常,您使用char(6)来表示HTML颜色代码(FFFFFF),而通常使用varchar来表示名称、地址等。

关于您的第二个问题,设置圆括号中的数字将设置字符串的最大长度。如果您将varchar(60)设置为字段,当插入或更新记录时,如果字符串的长度大于60个字符,则MySQL将截断该字符串并仅使用前60个字符。

您可以在此处查看所有字段类型:http://help.scibit.com/mascon/masconMySQL_Field_Types.html

您也可以阅读有关数据库规范化的信息:http://en.wikipedia.org/wiki/Database_normalization


如果你使用varchar(255)定义一个名字为"Tim"的字符串,那么它将占用4个字节。其中3个字节用于存储名字本身,另外1个字节用于存储字段长度。为什么要额外增加1个字节来存储字段长度呢?谢谢。 - zhuanzhou
5
+1 字节的处理是由 MySQL 引擎执行的,您无法更改。因为 varchar 是一个可变长度字符串,所以需要告诉 MySQL 字符串的长度。 - Book Of Zeus

3

一般来说,数据类型取决于您需要存储的内容。但是,在设计数据库表时也应考虑PK索引的速度和大小。

括号中的数字表示类型大小,具体含义取决于类型(例如,varchar表示可以存储的最大字符数)。您应该查看数据库引擎的手册以了解更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接