標籤:mysql
最近在看mysql最佳化視頻及各方文章,其中有建議為欄位選取合適的整數型別,在看int、bigint、smallint 和 tinyint的選取的時候有點迷惑,剛剛弄清楚,這裡分享一下
這裡先得說下基礎知識,1位元組(Byte)佔8個位(bit),1個位表示一個二進位的0或者1,
1個位元組能表示最大的整數是255,怎麼來的?
1個位元組就是8個二進位的1 “11111111” 轉換成十進位就是255
int類型佔4個位元組,就是4*8=32位,能表示最大的整數是多少?
11111111 11111111 111111111 11111111
轉換為十進位就是4294967295 ,不信你自己在表裡面某int類型的欄位裡面手動寫入一 個4294967296,儲存完了再開啟又給你退回到4294967295了。
然後我們引申出另一個詞:符號。
帶符號的int類型,表示的範圍是-2147483648到2147483647(在這個範圍裡面能表示4294967295個 數字),不帶符號的int類型範圍是0到4294967295,帶不帶符號其實int能表示的數位"寬度"不 變,只不過帶符號就是用0做為中分點。
下面就能舉一反三了
mediumint佔3個位元組 ,"寬度"為16777215 ,帶符號的以0做為正負中分點
smallint佔2個位元組,"寬度"為65535
tinyint 佔1個位元組 "寬度"255
明白這個我們在以後的資料庫設計中就能更合理的為欄位選取整數型別了,比如在商城系統的訂單表裡,為該表的主鍵應該選什麼合適?我覺得mediumint就夠了,在ecshop裡面,訂單表和商品表這兩個算是比較大的表了,其主鍵用的類型是mediumint。還有一些項目裡面會用到資料字典,或者說是類型表,這裡面的資料肯定不會太多的時候,用tinyint足矣
本文出自 “日進跬步,終成大神” 部落格,請務必保留此出處http://8210504.blog.51cto.com/8200504/1585433
Mysql中int、bigint、smallint 和 tinyint的範圍