mysql欄位每個型別長度大小與建表的型別長度
在建立資料庫表時,例如
create table user
(
id int(4) primary key ,
name varchar(20),
pwd varchar(20)
);
括號裡的數字叫資料的寬度,我們不能一概而論,因為不同的資料型別對寬度的處理也不一樣:
1、整數型別,這裡顯示的寬度和資料型別的取值範圍是沒有任何關係的,顯示寬度只是指明Mysql最大可能顯示的數字個數,數值的位數小於指定的寬度時會由空格填充;如果插入了大於顯示寬度的值,只要該值不超過該型別的取值範圍,數值依然可以插入,而且能夠顯示出來。
例如上面的udi,顯示的寬度是4,但是我向uid中插入100001,也是可以的,儲存和顯示的都會是100001
如果你不設定寬度,系統將新增預設的寬度 tinyint(4),smallint(6),mediumint(9),int(11),bigint(20),這些預設的寬度是跟該型別的取值範圍長度相關。
2、字串型別,字串型別這個寬度才真的用上了。不管是char還是varchar,寬度都定義了字串的最大長度
例如上面的 password varchar(20),如果你輸入了一個21個字元的密碼,那麼儲存和顯示的只會是前20個字元,你將丟失一個字元資訊,char同理。由於varchar是變長儲存的,所以實際開發中我們一般都把varchar的寬度設為最長255,反正你沒用完它也不會浪費空間。
3、浮點和日期等資料型別對資料的寬度沒有要求,一般也不設定,預設是0
序號 |
列型別 |
需要的儲存量 |
1 |
TINYINT |
1位元組 |
2 |
SMALLINT |
2個位元組 |
3 |
MEDIUMINT |
3個位元組 |
4 |
INT |
4個位元組 |
5 |
INTEGER |
4個位元組 |
6 |
BIGINT |
8個位元組 |
7 |
FLOAT(X) |
4如果 X < = 24或 8如果 25 < = X < = 53 |
8 |
FLOAT |
4個位元組 |
9 |
DOUBLE |
8個位元組 |
11 |
DOUBLE PRECISION |
8個位元組 |
12 |
REAL |
8個位元組 |
13 |
DECIMAL(M,D) |
M位元組(D+2 ,如果M < D) |
14 |
NUMERIC(M,D) |
M位元組(D+2 ,如果M < D) |
日期和時間型別
序號 |
列型別 |
需要的儲存量 |
1 |
DATE |
3個位元組 |
2 |
DATETIME |
8個位元組 |
3 |
TIMESTAMP |
4個位元組 |
4 |
TIME |
3個位元組 |
5 |
YEAR |
1位元組 |
串型別
序號 |
列型別 |
需要的儲存量 |
1 |
CHAR(M) |
M位元組,1 <= M <= 255 |
2 |
VARCHAR(M) |
L+1位元組,在此L <= M和1 <= M <= 255 |
3 |
TINYBLOB,TINYTEXT |
L+1位元組,在此L< 2 ^ 8 |
4 |
BLOB, TEXT |
L+2位元組,在此L< 2 ^ 16 |
5 |
MEDIUMBLOB, MEDIUMTEXT |
L+3位元組,在此L< 2 ^ 24 |
6 |
LONGBLOB, LONGTEXT |
L+4位元組,在此L< 2 ^ 32 |
7 |
ENUM('value1','value2',...) |
1或 2個位元組,取決於列舉值的數目(最大值65535) |
8 |
SET('value1','value2',...) |
1,2,3,4或8個位元組,取決於集合成員的數量(最多64個成員) |