1. 程式人生 > >理解MySQL資料型別,寬度,位元組

理解MySQL資料型別,寬度,位元組

整型

tinyint(m) 1個位元組 範圍(-128~127)
smallint(m) 2個位元組 範圍(-32768~32767)
mediumint(m) 3個位元組 範圍(-8388608~8388607)
int(m) 4個位元組 範圍(-2147483648~2147483647)
bigint(m) 8個位元組 範圍(+-9.22*10的18次方)

括號中的m代表顯示的寬頻其實在整型中並沒有什麼卵用,int(10)與int(1)都佔用4個位元組。
int(3)也可以儲存66666當然也可以顯示,但是長度不能超過2147483647也就是10位數。

此處留個疑問:所以電話號碼不能用int來儲存,那麼用char好還是用bigint?

字元型

char(n) 固定長度,最多255個字元,n個位元組
varchar(n) 可變長度,最多65535個字元,L+1個位元組
tinytext 可變長度,最多255個字元
text 可變長度,最多65535個字元
mediumtext 可變長度,最多2的24次方-1個字元
longtext 可變長度,最多2的32次方-1個字元

char型別為定長char(5)儲存5個字元,如utf-8時,它的每個字元都可能會佔用不同的
儲存空間,漢字的每個字元為三個位元組,所以char(5)在儲存5個漢字時佔用5*3個位元組,
char型別適合固定長度的字元,超出部分會被擷取,不足部分會以空格補充,取出時會去掉
後面空格。它的速度效能要優於varchar。

varchar型別適用不定長varchar(5),utf8下儲存5個漢字佔用的位元組為:5*3+1個位元組,
超出部分會被截掉,不足部分不進行填充。

應用判斷場景:

手機號碼的型別選擇

手機號碼為固定的11位所以可以選擇char型別或者bigint型別,那麼char(11)佔用11個位元組,然而bigint佔用8個位元組,所以選擇bigint型別儲存手機號更為合適。