mysql數據庫中的類型是以 “ 數據類型(m) ” 來定義的 :其中 數字m在不同的數據類型中表示含義是不同的。 整型數系統已經限制了取值范圍,比如tinyint占一個字節(8bit)、int占4個字節。所以整型數后面的m不是表示的數據長度,而是表示數據在顯示時顯示的最小長度(長度為字符數)。
tinyint(1) 這里的1表示的是最小顯示寬度是1個字符。
tinyint(2) 這里的2表示的是最小顯示寬度是2字符,但這里光設置m是沒有意義的,你還需要指定當數據少於長度m時用什么來填充,比如zerofill(表示有0填充)。
設置tinyint(2) zerofill 你插入1時他會顯示01。
設置tinyint(4) zerofill 你插入1時他會顯示0001。
mysql中tinyint(1)與tinyint(2)的區別
tinyint 型的字段如果設置為UNSIGNED類型,只能存儲從0到255的整數,不能用來儲存負數。
tinyint 型的字段如果不設置UNSIGNED類型,存儲-128到127的整數。
1個tinyint型數據只占用一個字節;一個INT型數據占用四個字節。
這看起來似乎差別不大,但是在比較大的表中,字節數的增長是很快的。
tinyint(1)與tinyint(2)的區別可以從下面看出來
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `str` varchar(255) NOT NULL, `state` tinyint(1) unsigned zerofill DEFAULT NULL, `state2` tinyint(2) unsigned zerofill DEFAULT NULL, `state3` tinyint(3) unsigned zerofill DEFAULT NULL, `state4` tinyint(4) unsigned zerofill DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 insert into test (str,state,state2,state3,state4) values('csdn',4,4,4,4); select * from test;
結果:
id | str | state | state2 | state3 | state4 |
1 | csdn | 4 | 04 | 004 | 0004 |
tinyint和enum的區別?
TINYINT(1)或ENUM('真','假')?
用ENUM枚舉當存儲只有2個值時只占用一個位的寬度,0或1,但會花更多的時間去尋找了枚舉查詢的開始。
用TINYINT(1)默認就會占用4個位的寬度(0000)
得出結論:
比如要存儲一個介於0-9之間的值,為了查詢獲取這個值,建議用TINYINT(1)會更快,
但如果你是為了大量記錄枚舉(“真”,“假”),那么用ENUM( 'true' , 'false') 搜索會更快。
所以由這里可以看出,當你使用tinyint[1]來存儲超過0,1兩個值以外的值,比如存儲2,那這個2就是臟數據,tinyint[1]只適用於存儲0和1兩個值,也即真和假,true和false
一般的,咱們如果存的是純數字的話,建議用tinyint,如果是字符串,且是固定長度的,建議用char,而enum的枚舉字段,使用的使用需要慎重考慮,避免帶來不必要的麻煩