對於int類型的一些基礎知識其實上圖已經說的很明白了,在這里想討論下常用的int(11)代表什么意思,很長時間以來我都以為這代表着限制int的長度為11位,直到有天看到篇文章才明白,11代表的並不是長度,而是字符的顯示寬度,在字段類型為int時,無論你顯示寬度設置為多少,int類型能存儲的最大值和最小值永遠都是固定的
當int字段類型設置為無符號且填充零(UNSIGNED ZEROFILL)時,當數值位數未達到設置的顯示寬度時,會在數值前面補充零直到滿足設定的顯示寬度,為什么會有無符號的限制呢,是因為ZEROFILL屬性會隱式地將數值轉為無符號型,因此不能存儲負的數值。
插入兩條數據
INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1); INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
select * from int_demo;
| id | a | b | c | d | e |
|---|---|---|---|---|---|
| 1 | 1 | 00000000001 | 1 | 00001 | 1 |
| 2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |
注釋:如果用navicate軟件查詢出來並不會顯示左邊的0,但把數據導出時可看到真實的數據,猜測是軟件對數據格式進行了處理?
三、結論
從上個例子我們可以得出以下幾個結論:
- 如果一個字段設置了無符號和填充零屬性,那么無論這個字段存儲什么數值,數值的長度都會與設置的顯示寬度一致,如上述例子中的字段b,插入數值1顯示為00000000001,左邊補了10個零直至長度達到11位;
- 設置字段的顯示寬度並不限制字段存儲值的范圍,比如字段d設置為int(5),但是仍然可以存儲1234567890這個10位數字;
- 設置的字符寬度只對數值長度不滿足寬度時有效,如d字段int(5),插入1時,長度不足5,因此在左邊補充4個零直到5位,但是插入1234567890時超過了5位,這時的顯示寬度就起不了作用了。
