1. 程式人生 > >mysql欄位每個型別長度大小與建表的型別長度

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 <= M1 <= 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',...)

12348個位元組,取決於集合成員的數量(最多64個成員)