在建立資料庫表時,例如
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)
日期和時間型別
序號 列型別
需要的儲存量
date
3個位元組
datetime
8個位元組
timestamp
4個位元組
time
3個位元組
year
1位元組
串型別
序號
列型別
需要的儲存量
char(m)
m位元組,1 <= m <= 255
varchar(m)
l+1位元組,在此l <= m和1 <= m <= 255
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個成員)
MySQL 修改字段型別或長度
mysql alter table 表名 modify column 欄位名 型別 例如資料庫中address表 city欄位是varchar 30 修改型別可以用 謹慎修改型別,可能會導致原有資料出錯 mysql alter table address modify column city cha...
MySQL欄位型別及長度值
一 數字型別 型別 範圍 說明 n 1 255 個字元 binary 分辨大小寫 固定長度 std name cahr 32 not null n 1 255 個字元 binary 分辨大小寫 可變長度 std address varchar 256 tinyblob 最大長度255個字元 2 8 ...
MySQL 修改字段型別或長度
mysql alter table 表名 modify column 欄位名 型別 例如資料庫中address表 city欄位是varchar 30 修改型別可以用 謹慎修改型別,可能會導致原有資料出錯 mysql alter table address modify column city cha...