1. 程式人生 > 實用技巧 >MySQL中的int(11)含義

MySQL中的int(11)含義

今天在建MySQL表的時候突然想弄清楚

  • int(11)的含義。
  • 為什麼括號中的數字大多數情況都是11而不是其他數字。

int(11)的含義

0、先建一張表,順便插入一些數值

create table `account`(
  `id` int(3)
)engine = innodb default charset=utf8;

insert into `account`(`id`) values(12);
select * from `account`;

1、然後我們看看此時表的結構和表中資料

2、將【Zerofill】勾選上,看看錶中資料


圖中的資料剛好展示了3位,和我們的int(3)中的3符合。

3、改變表中的int(n)中n的值,並保持zerofill勾選,看結果

alter table `account` change `id` `id` int(5) zerofill;


圖中資料展示了5位,和int(n)中n的值的位數是一樣的

4、如果現在插入超過int(n)中n位數的資料(比如說6位數)呢?資料會不會丟失?

insert into `account`(`id`) values(123456);
select * from `account`;


答案是:依然會展示插入的資料,不會丟失資料

5、如果插入超過int型別的上限的數呢?

我們知道MySQL中的int是佔4個位元組,每個位元組8位,一共就是32位。
而且上面勾選了【Unsigned】,也就是無符號數,那麼int的取值最大就可以取到
2^32 - 1 = 4294967295

,我們把這個值插進去看看結果

insert into `account`(`id`) values(4294967295);
insert into `account`(`id`) values(4294967296);


6、結論

通過以上幾點,我們可以推斷:

- int(n)中的n就是資料展示的位數(長度)。但是這樣說不夠精確:

1. 在沒開啟【zerofill】的情況下,不管是幾位數,只要不超過int型別的上限,都直接顯示資料。

2. 在開啟【zerofill】的情況下,n的數值是展示的資料的位數的下限。位數不夠n位數,則高位補0;位數夠了也不會損失資料,直接顯示插入的資料。

3. 超過int型別上限的數是無法插入資料庫表中的。

為什麼括號中的數字大多數情況都是11而不是其他數字?

因為int型別的資料上限是2^32 - 1 = 4294967295,這個數值剛好10位數,超過這個數值的數無法插入資料庫表中,自然也就無法展示,所以選擇超過10的n值就沒有太大意義。

所以我們選擇11位的展示長度肯定是夠用了,(實際上寫10就夠用的),除此之外可能就是習慣了,但是具體的n取多少還是根據具體情況而定。