在 MySQL 中 int (10) 和 int (11) 的區(qū)別

在 MySQL 中 int (10) 和 int (11) 的區(qū)別

最近在找工作所以一直在面試,在面試過(guò)程中暴露了自己很多不足的地方,一直在總結(jié)和歸納。可能大部分面試官對(duì) mysql 的問(wèn)題都會(huì)問(wèn)數(shù)據(jù)庫(kù)優(yōu)化啊、主從復(fù)制啊、索引啊、引擎啊等等之類的。那么使我印象最深的是 int (10) 和 int (11) 有什么區(qū)別。這好像是最基礎(chǔ)的問(wèn)題了,我好像從來(lái)沒有在意過(guò)。當(dāng)時(shí)有點(diǎn)兒懵逼,有什么區(qū)別?不知道!沒想過(guò)!

那么回到家以后,我趕緊復(fù)習(xí)了下 mysql數(shù)據(jù)類型相關(guān)知識(shí)。對(duì)整數(shù)類型做些說(shuō)明。

mysql 中整數(shù)數(shù)據(jù)類型

數(shù)據(jù)類型 說(shuō)明 存儲(chǔ)需求
tinyint 很小的整數(shù) 1 字節(jié)
smallint 小的整數(shù) 2 字節(jié)
mediumint 中等大小的整數(shù) 3 字節(jié)
int(Integer) 普通大小的整數(shù) 4 字節(jié)
bigint 大整數(shù) 8 字節(jié)

不同類型的取值范圍

數(shù)據(jù)類型 有符號(hào) 無(wú)符號(hào)
tinyint -128~127 0~255
smallint -32768~32767 0~65535
mediumint -8388608~8388607 0~16777215
int(integer) -2147483648~2147483647 0~4294967295
bigint -9223372036854775808~9223372036854775807 0~18446744073709551615

不同數(shù)據(jù)類型的默認(rèn)顯示寬度

數(shù)據(jù)類型 默認(rèn)顯示寬度
tinyint 4
smallint 6
mediumint 9
int(integer) 11
bigint 20

* 因?yàn)樨?fù)號(hào)占了一個(gè)數(shù)字位,所以各類型的寬度是最大值數(shù)字位 + 1 位。例如 tinyint 的最大數(shù)字位是 3,加負(fù)號(hào)所以顯示寬度是 4。

那么取值范圍和顯示寬度到底有什么關(guān)系呢?我利用 tinyint 做了個(gè)實(shí)驗(yàn),首先創(chuàng)建一張表如下

mysql>?desc?test_integer; +-----------+------------+------+-----+---------+----------------+ |?Field?????|?Type???????|?Null?|?Key?|?Default?|?Extra??????????| +-----------+------------+------+-----+---------+----------------+ |?id????????|?int(11)????|?NO???|?PRI?|?NULL????|?auto_increment?| |?test_id_1?|?tinyint(1)?|?NO???|?????|?NULL????|????????????????| |?test_id_2?|?tinyint(4)?|?NO???|?????|?NULL????|????????????????| +-----------+------------+------+-----+---------+----------------+ 3?rows?in?set?(0.00?sec)

我分別創(chuàng)建了有符號(hào) tinyint 類型的 test_id_1 顯示寬度為 1 和 test_id_2 顯示寬度為 4 兩字段,接下來(lái)插入數(shù)據(jù),同時(shí)插入 – 128、1 和 127 這些數(shù)值,看看會(huì)怎么樣。

mysql>?insert?into?test_integer?(test_id_1,test_id_2)?values?(-128,-128),?(1,1),?(127,127); Query?OK,?3?rows?affected?(0.00?sec) Records:?3??Duplicates:?0??Warnings:?0

ok 提示插入成功,我們查詢一下

mysql>?select?*?from?test_integer; +----+-----------+-----------+ |?id?|?test_id_1?|?test_id_2?| +----+-----------+-----------+ |??1?|??????-128?|??????-128?| |??2?|?????????1?|?????????1?| |??3?|???????127?|???????127?| +----+-----------+-----------+ 3?rows?in?set?(0.00?sec)

查詢出來(lái)的結(jié)果也是一樣,經(jīng)過(guò)以上實(shí)驗(yàn)得到結(jié)論:

顯示寬度整數(shù)類型的取值范圍是無(wú)關(guān)的。顯示寬度只是指明 mysql 最大可能顯示的數(shù)字個(gè)數(shù),數(shù)值的位數(shù)小于指定的寬度時(shí)就由空格填充,如果插入了大于顯示寬度的值,只要該值不超過(guò)該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來(lái)。

同理,所以 int (10) 和 int (11) 沒有任何區(qū)別,就是顯示寬度不同,小伙伴們千萬(wàn)不要忘記了呀。

推薦教程:《PHP教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享