前沿拓展:整形int 多少位


在 mysql 數(shù)據(jù)庫(kù)的使用中,我們常常指定數(shù)據(jù)庫(kù)表的字段的類型為整型int和可變字符串varchar,如下面一段 ddl (Data Definition Language)語法:

CREATE TABLE `test` ( `id` bigint NOT NULL AUTO_INCREMENT, `age` int(5) DEFAULT NULL, `age1` int DEFAULT NULL, `name` varchar(5) DEFAULT NULL, `name1` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;varchar(n)

針對(duì)varchar(n)很多人都知道,n是指字符串長(zhǎng)度,我們先實(shí)驗(yàn)一下:

INSERT INTO `test`(`age`, `age1`, `name`, `name1`) VALUES (12345, 12345, 'ganhuojun', 'ganhuojun');

運(yùn)行結(jié)果如下:

1406 - Data too long for column 'name' at row 1, Time: 0.001000s

可見數(shù)據(jù)長(zhǎng)度過大,varchar(5)只能允許5個(gè)字符長(zhǎng)度,修改下 sql 語句:

INSERT INTO `test`(`age`, `age1`, `name`, `name1`) VALUES (12345, 12345, 'ganhu', 'ganhuojun');

運(yùn)行結(jié)果如下,說明降低了 name 字段的長(zhǎng)度到5是可以成功存儲(chǔ)的

Affected rows: 1, Time: 0.001000s

驗(yàn)證了varchar(n)中的n確實(shí)是指字符串長(zhǎng)度

int(n)

在mysql數(shù)據(jù)庫(kù)中,int占四個(gè)字節(jié),一個(gè)字節(jié) 8 位,也就是 4 * 8 = 32,即2^32個(gè)數(shù)字。

那int(n)當(dāng)中的n會(huì)不會(huì)和varchar(n)含義一樣,下面將age字段輸入123456來執(zhí)行一下:

INSERT INTO `test`(`age`, `age1`, `name`, `name1`) VALUES (123456, 123456, 'ganhu', 'ganhuojun');

執(zhí)行結(jié)果如下,發(fā)現(xiàn)竟然成功了,說明與varchar(n)含義不一樣,并非限制數(shù)據(jù)長(zhǎng)度。

Affected rows: 1, Time: 0.001000s

那么這個(gè)int(n)中的n到底是什么含義呢?

int(n) 中的n其實(shí)是指大顯示寬度,大有效顯示寬度是 255,且顯示寬度與存儲(chǔ)大小或類型包含的值的范圍無關(guān)。

下面我們來驗(yàn)證一下,為了直觀顯示,使用ZEROFILL關(guān)鍵字,ZEROFILL的作用是插入數(shù)據(jù)時(shí),當(dāng)該字段的值的長(zhǎng)度小于定義的長(zhǎng)度時(shí),會(huì)在該值的前面補(bǔ)上相應(yīng)的0,重新定義一張表:

CREATE TABLE `test1` ( `id` bigint NOT NULL AUTO_INCREMENT, `age` int(5) ZEROFILL DEFAULT NULL, `age1` int ZEROFILL DEFAULT NULL, `name` varchar(5) DEFAULT NULL, `name1` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

此時(shí),我們插入2組數(shù)據(jù)對(duì)比下結(jié)果:

INSERT INTO `test1`(`age`, `age1`, `name`, `name1`) VALUES (1, 123456, 'ganhu', 'ganhuojun'); INSERT INTO `test1`(`age`, `age1`, `name`, `name1`) VALUES (123456, 123456, 'ganhu', 'ganhuojun');

執(zhí)行后結(jié)果如下圖,看到1由于只有1個(gè)寬度,前面補(bǔ)充來4個(gè)0,達(dá)到了5位,而123456已經(jīng)是6位了,顯示正常。

此處驗(yàn)證了插入數(shù)據(jù)寬度小于定義n時(shí),前面會(huì)用0補(bǔ)全,當(dāng)超過定義的寬度n時(shí),也能正常顯示;注意int(n)并不會(huì)限制實(shí)際int的存儲(chǔ)大小,依舊可以存4個(gè)字節(jié)的數(shù)據(jù)。

拓展知識(shí):整形int 多少位

還有其他疑惑?想了解更多?可以點(diǎn)擊 【在線咨詢】