对于mysql而言,tinyint(1)与tinyint(4)的区别

答案其实很简单,但是我的几个朋友还是搞不清 MySQL 的列类型定义中长度修饰符(指TINYINT(N)中的N)的作用,所以我在这里再解释一下。我相信,这个问题的出现的根本原因将字符串列类型定义中 N 的意义挪用到了数值列类型的定义中。
VARCHAR(N)
CHAR(N)
对于字符串列类型 VARCHAR(N) 和 CHAR(N)而言,N 是字段中可以存储的最大字符长度,也就是说是字段长度。根据设置,当你插入超出字段长度的数据时,你很可能会收到错误提示,即使没有收到错误提示,你插入的数据也会被自动截断以适应该字段的预定义长度。所以,VARCHAR(20) 和 VARCHAR(40) 是不同的,其真实反映了该字段可以存储的数据长度。
现在,让我们来看看数值列类型。对于数值列类型而言,其长度修饰符表示显示宽度,与该字段物理存储没有任何关系。也就是说,TINYINT(1) 和 TINYINT(4) 能够存储的数值范围都是-128..127 (or for unsigned values 0..255),他们是相同的数据类型,当然他们还是有一点差异,以下会有说明。
那么既然 display width 无法限制其所修饰字段的列范围,为什么还要使用它呢?在MySQL论坛中,有一个帖子建议通过使用display width 来提醒我们自己该字段应该有多大。就我个人而言,这个建议确实不错,当我们复查自己的数据库定义的时候,可以很容易看到该字段有多大。
display width的一个重要作用是配合ZEROFILL来使用。
所以,最后让我们记住,对于数值数据而言,TYPE(N) 中的 N 跟数值范围没有任何关系,它表示显示宽度。

此条目发表在DB/ES分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据