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)以及诸如此类的,根本不注意用。并原因表格军事]野战的典型的多样化。。

证明人视频博客: