mysql 中 int 5 到底有是多長?

2021-09-09 08:27:37 字數 1916 閱讀 4135

在設計 mysql 表字段時,int(5) 表示是該字段長度為 5 嗎?如果你覺得是,那請你繼續往下看,相信你會有新的收穫的。

先來看乙個實際例子,我們建立乙個新錶,表中只有乙個主鍵 id 和乙個 length 字段,其中 length 字段設定為 int(5) 。

#新建test表

create table `test` (

`id` int(11) not null auto_increment,

`length` int(5) not null,

primary key (`id`)

) engine=innodb auto_increment=1 default charset=utf8;

是不是 length 字段只能儲存長度不超過 5 的數字呢,我們來插入一條資料試試。我們插入一條較大的資料 123456789 ,這個資料一共有 9 位,看能否正常插入。

#插入一條大資料

insert into test (length) values (123456789);

結果證明 int(5) 能插入長度大於 5 的資料,所以現在可以肯定的是 int(5) 並不是代表資料的寬度。

#檢視插入資料

mysql> select * from test;

+------------+-----------+

| id         | length    |

+------------+-----------+

|  1         | 123456789 |

+------------+-----------+

在 mysql 中 int 字段長度其實是固定的,就是 4 個位元組,不管你 int(11)  還是 int(5) 字段長度就是固定的 4 個位元組。

int(5) 其實是和另乙個屬性 zerofill 配合使用的,表示如果該字段值的寬度小於 5 時,會自動在前面補 0 ,如果寬度大於等於 5 ,那就不需要補 0 。

#int(5) length 字段新增了 zerofill 屬性

mysql> select * from test;

+----+--------+

| id | length |

+----+--------+

|  1 |  00888 |

|  2 |  00012 |

|  3 |  12345 |

|  4 | 123456 |

+----+--------+

注意前提是給該字段新增了 zerofill 屬性,不然 int(5) 不起作用。

#int(5) length 字段沒有 zerofill 屬性

mysql> select * from test;

+----+--------+

| id | length |

+----+--------+

|  1 |    888 |

|  2 |     12 |

|  3 |  12345 |

|  4 | 123456 |

+----+--------+

要想對整形字段設定長度,應該是選擇 tinyint、smallint、mediumint、int、bigint 這幾個型別,這幾個整數型別才代表了固定的長度,具體長度請看下面這個**。

注意如果要儲存帶符號的整形數,是不支援 zerofill 屬性的,會自動轉換為 0,在一些涉及遞減的業務中需要注意考慮一下。

mysql 中 int 5 到底有是多長?

在設計 mysql 表字段時,int 5 表示是該字段長度為 5 嗎?如果你覺得是,那請你繼續往下看,相信你會有新的收穫的。先來看乙個實際例子,我們建立乙個新錶,表中只有乙個主鍵 id 和乙個 length 字段,其中 length 字段設定為 int 5 新建test表 create table ...

MySQL中int 5 最大長度

首先來看看不同型別的長度和大小限制 型別所佔位元組數 大小或長度 byte 1位元組 128 2 7 127 2 7 1 boolean 至少1位元組 這種型別只作為一種標誌來記錄 true false 情況 short 2位元組 32768 2 15 32767 2 15 1 char 2位元組 ...

MySQL唯讀事務到底有啥用?

很多人認為mysql唯讀事務沒啥用,有點雞肋,以前我也這麼認為,自從認真研究了事務的隔離級別和事務的併發問題後,發現這個唯讀事務其實並不是大家想象的那麼無用。下面舉乙個實際開發中可能會遇到的例子來說明唯讀事務的作用。展示使用者列表的需求,後台從資料庫查詢使用者列表返回給前端分頁展示,分頁通過資料庫的...