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的填空创纪录的典型zerofill(表现用0填空),在这里你赚得怎地做,我们的可以从招致中推断推论。:

现时有区别的了吗?。我们的设置的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)以此类推的,根本不注意用。并招致表格田典型的多样化。。

引用视频博客: