MySQL中int(M)和tinyint(M)数值类型中M值的意义
日期:2018-07-24

目今,由于面试常常被问到关系到通知库的知。,赠送,我也想深刻知识这时意思。。

率先,笔者准备一点钟通知单表棘手的:

mysql> CREATE TABLE test(
    -> id1 INT(1),
    -> id2 tinyint(1)
    ->);

笔者将ID1界说为int,并将性格按尺寸排列设置为1,id2界说为tinyint,也将性格按尺寸排列设置为1;

过后拔出值127。,127,果实获得知识,二者都被拔出到通知单表中。:

mysql> INSERT INTO 棘手的(ID1),ID2) values(127,127);//成运转

果实是拔出成。,从这时棘手的中早已已收到,我先前的打手势都错了。,过后让笔者做个试验。,拔出通知128,128,即,ID=128。,id2=128:

mysql> INSERT INTO 棘手的(ID1),ID2) values(128,128);//运转北:ERROR 1264 (22003):Out of range value for column ID2 at row 1

出错了,ID1拔出的int典型是成的,tinyint典型的id2鼓励超越了类别,为什么会很?

率先,率先,笔者需求知识一点钟根本知点。,这是下表:(选自W3C航线)

下面表击中要害数字典型是通过作弊预先安排好结果的的。,即,轻蔑的拒绝或不承认你节省到什么程度牺牲,多大不断地小,八位字节的尺寸是通过作弊预先安排好结果的的。。比如,以前设置的INT(1),m值为1个性格,又它所运用的合住的尺寸常常4八位字节。,亦即,它是,可以从-2同意官职的标志完整的。 147 483 648到2 147 483 647包含两个数字击中要害无论哪些一点钟的本利之和。。INT(1)和INT(11)运用的是4个八位字节,这些数字可以被同意。,tinyINT(1)和tinyint(4)运用的是1个八位字节,你可以把数字从-128同意到127,这执意为什么先前的试验,INT(1)拔出128成,而tinyINT(1)拔出128却鼓励超越按尺寸排列。

这么,M终于是什么意思?

到喂,笔者早已已收到,m值设置为1。,它也可以回忆在大于1的性格按尺寸排列的值中。,这么,免得存入的性格按尺寸排列决不1会方式?笔者来有机会:

将ID1的典型更反而int(2),过后拔出通知ID1=1。:

mysql> ALTER TABLE test Modify id1 int(2));
mysql> INSERT INTO 棘手的(ID1)) values(1);//成运转,解说值1已拔出棘手的表中。

让笔者查询一下表击中要害通知。,看一眼果实。:

接下来,让笔者为ID1修正代替通知典型ZoFulID(表现零代替),喂你意识到怎地做,笔者可以从果实中管辖的范围收场白。:

如今明白的了吗?。笔者设置的M值是2。,当零代替缺席代替0代替时,对手术缺席碰撞。,设置零线后,笔者可以明白的地看见,1个性格的本利之和决不M值。,左前安置补片0。笔者也可认为多个棘手的设置M值到清楚的的尺寸。,喂缺席棘手的。。

需求着重的是,清楚的通知典型的M值是清楚的的。,笔者只议论完整的击中要害m值。。

从越过笔者可以到达以下收场白:

1、完整的数值典型限度局限了值的类别。,有官职的标志完整的和无官职的标志完整的。,m值不表现可以是数字性格的按尺寸排列。,它表如今显示持久显示的通知的最小按尺寸排列。;

2、当回忆性格的按尺寸排列超越m值时,缺席影响,如果它不超越数值典型的限度局限;

3、当回忆性格的按尺寸排列决不m值时,仅有的零点代替0代替。,只看见影响,亦即,即,无无法律效力,m值是无效的。

总结:INT(11),tinyINT(1),bigint(2)0),在后面的数字,无合住内容表现。最小数字代表数。这件事本质上毫无意思。,除非为领域命名零代替。

因而笔者在设计MySQL通知库,修建服务台的工夫,MySQL无意识或下意识行为分派按尺寸排列:INT(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(2)0)。

因而,可以运用这些默许显示按尺寸排列。你不用回到你自己的按尺寸排列,比如,做一点钟int(10)、tinyINT(1)什么的的,根本缺席用。并理由表格领域典型的多样化。。

指的是视频博客: