創建mysql數據表時,字段的int類型長度問題

填完字段名、數據類型之後就要填寫長度,就好比int(4) varchar(16)這裏的4和16 ,這個M代表什麼意思呢?varchar類型的沒什麼異議,但是這個INT的呢?第一感覺就是代表長度,我只能存儲4個數字以內的,可我存超過4位的數字的時候依然是可以存的,所以這樣的理解是不完全對的。

其實這個M跟INT能表示的範圍沒有關係,只要你選擇了INT,INT是用4個字節表示,1個字節8位,若表示無符號數時可以表示的範圍是 0 ——- 232-1 ,你可以存儲任何在這個範圍內的數字。但也不是說跟表示完全沒關係,mysql中有個zerofll,當建表時選擇了0填充之後存儲就會有很大的不同,這時如果你選擇的是int(4) 你存儲12則數據庫中存儲的是0012,如果填寫12345,此時超過了他的指定寬度則按原樣存儲。如:

//創建一個表
mysql> create table length_test(id int(4) zerofill,name varchar(16));
Query OK, 0 rows affected (0.06 sec)
//插入一行數據
mysql> insert into length_test values (12,’suchshow’);
Query OK, 1 row affected (0.05 sec)
//查詢看看
mysql> select * from length_test;


+——+———-+
| id | name |
+——+———-+
| 0012 | suchshow |
+——+———-+
1 row in set (0.00 sec)

//再插入一行數據
mysql> insert into length_test values (12345,’suchshow’);
Query OK, 1 row affected (0.03 sec)
//顯示結果
mysql> select * from length_test;
+——-+———-+
| id | name |
+——-+———-+
| 0012 | suchshow |
| 12345 | suchshow |
+——-+———-+
2 rows in set (0.00 sec)

所以說後面的M跟表示的範圍是沒有影響的,只不過表示顯示的寬度,搞懂了之後還是挺有用的

其中常用的數字型所佔用的字節數如下,根據字節數即可算出表示的範圍了
TINYINT 1 字節
SMALLINT 2 個字節
MEDIUMINT 3 個字節
INT 4 個字節
INTEGER 4 個字節
BIGINT 8 個字節
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 個字節
DOUBLE 8 個字節
DOUBLE PRECISION 8 個字節
REAL 8 個字節
DECIMAL(M,D) M字節(D+2 , 如果M < D)
NUMERIC(M,D) M字節(D+2 , 如果M < D)

日期和時間類型
列類型 需要的存儲量
DATE 3 個字節
DATETIME 8 個字節
TIMESTAMP 4 個字節
TIME 3 個字節
YEAR 1 字節

串類型
列類型 需要的存儲量
CHAR(M) M字節,1 VARCHAR(M) L+1 字節, 在此L TINYBLOB, TINYTEXT L+1 字節, 在此L< 2 ^ 8
BLOB, TEXT L+2 字節, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字節, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字節, 在此L< 2 ^ 32
ENUM(‘value1′,’value2′,…) 1 或 2 個字節, 取決於枚舉值的數目(最大值65535)
SET(‘value1′,’value2′,…) 1,2,3,4或8個字節, 取決於集合成員的數量(最多64個成員)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章