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