2011-07-30 82 views
8

进出口新的数据库编程和我有一个非常基本的问题:MySQL数据库的数据类型

在我的phpMyAdmin界面,即时通讯使用的是创建在我的数据库表,这是什么意思时,列“型”(即。datatype)具有数据类型和其后的括号中的内容。 例如: int(20),bigint(30).....

我明白int和bigint类型意味着使用的字节数,因此也就是可以存储的值的范围。但括号中的值是什么意思?

什么的(20)和(30)代表....什么样的影响,这是否会....

对不起,如果Q是基本的,我想了解数据库.. ..

非常感谢

回答

12

基本上,这是一个显示宽度

我发现这个概念很好的解释here is所以决定不要自己描述它,让你从原始来源自己读。

以同样的方式,一个最大长度可以为字符串数据类型来指定(例如VARCHAR(5)=最大5个字符),数字数据类型的细胞可以具有“显示长度”中指定(如:INT(5))。

在INT列上指定显示长度会限制该列的范围是一个常见的误解。作为示例,通常认为将列定义为INT(1)会将列的无符号范围降低为0 - 9,并且INT(2)会将列的无符号范围缩小为0 - 99。不是这种情况。无论指定的显示宽度如何,数据列总是具有可用的无符号范围0-4294967295或-2147483648至2147483647的有符号范围,无论是1(INT(1))还是20( INT(20))。

  1. 显示宽度不会更改数据类型的存储要求。
  2. 显示宽度不以任何方式改变的实际数据(即:它存储了数据的整个值)
  3. 甲列返回它是在查询调用时满值,而不管显示宽度的(书直接违背这一要求它使如上所示)
+0

感谢您的详细答案sll。欣赏它。 – banditKing

+0

@ user657514'INT(x)'/'BIGINT(x)'与* VARCHAR(x)'''CHAR(x)'或'NUMERIC(x,y)'相比*是不同的*。在前一个地方,它仅仅是一个“显示宽度”。后者的情况实际上是施加了限制。这在整个响应过程中得到解决,但“看到”却令人困惑。 – 2011-07-30 20:59:00

+0

@sll我发现那个链接...不太好。根据文章'VARCHAR(55)',不能存储长度为零的字符串!我对信源的准确性的信念被削弱了。 :( – 2011-07-30 21:03:37

0

括号中的值是字段的大小或长度。 [Edit strike]如果设置为2,则uint字段只能托管0到99之间的值[/ strike]如果您希望值不超过此限制,可以自行设置此值,从而节省一点内存。与varchar有关。

这里另一个大约VARCHAR尺寸螺纹:What are the optimum varchar sizes for MySQL?

+0

你肯定INT(2)将限制可容纳INT列0-99 – sll

+0

值范围哼。所以如果我有一个INT作为我的数据类型,那么它支持的值的范围是:-2147483648到2147483647.但是如果我预计我不会使用这个范围,我可以在括号中设置一个值,如下所示:INT(4 )并且这样做意味着上限减少到3647? 你能举一个实例来澄清一下吗? 谢谢 – banditKing

+1

不,我很抱歉。这仅适用于字符。看到sll的答案! –