2011-03-04 82 views
1

我正在为一个系统创建数据库模式,并开始想知道关于MySQL中整数数据类型的信息。我已经看到,至少在Moodle中,数据类型有时是TINYINT(例如标志),INT(用于ID号)或BIGINT(用于几乎无限的AI值,如用户标识)。我应该在MySQL中使用什么样的整数?

我想知道:这是如何影响实际的数据库?如果我使用INT来表示标志(例如1 =正在处理,2 =正在处理,3 =正在处理,4 =已处理)而不是TINYINT或BIGINT,是否会产生影响?那么不设置约束呢? (再次像旗子一样,使用TINYINT(1)或TINYINT(没有特定号码))

回答

4

您提供的大小不会影响数据的存储方式。

因此INT(11)以与INT(3)相同的方式存储在磁盘上。

有了您的 1 = pending, 2 = in process, 3 = revewing, 4 = processed

比如我会用一个ENUM('pending', 'inprocess', 'revewing', 'processed')代替。这样可以保持代码和数据的可读性,同时提供与使用整数相同的速度。 MySQL参考手册中

+0

哦,这是一个很棒的提示!但是,例如,如果我只存储基于10位数字的数据,那么使用INT(10)比使用INT更好?它会以任何方式影响性能/数据吗? – AeroCross 2011-03-04 05:19:11

+1

'TINYINT(5)'和'INT(5)'在磁盘上是不同的(1字节vs 4字节),而INT(1)和INT(2)是相同的(都是4字节)。 – 2011-03-04 18:53:45

2

您应该阅读关于different numeric datatypes的信息,并根据该信息做出决定。

+0

重要的一点 - 我不知道到现在为止,在所附的号码数据类型为** **没有约束。 – AeroCross 2011-03-04 05:28:16

3
+0

tinyint和tinyint之间的区别是什么unsigned,mediumint和mediumint unsigned ... – 2011-03-04 05:18:17

+0

在这篇文章的第二个答案有我的另一个问题的答案 - 基本上,它存储相同的数据,并以相同的方式访问它(对于我可以推导出),但是它需要更多的数据(例如,存储在TINYINT中的数字4占用1个字节,并且存储在BIGINT中的数字4占用8个字节)。谢谢! – AeroCross 2011-03-04 05:26:25

+0

这不是一个答案。这是链接到别人的工作! – Dynamic 2012-05-12 23:01:56

相关问题