MySQL面試題-數據類型

mysql有哪些數據類型


MySQL面試題-數據類型


· 1、整數類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分別表示1字節、2字節、3字節、4字節、8字節整數。任何整數類型都可以加上UNSIGNED屬性,表示數據是無符號的,即非負整數。


長度:整數類型可以被指定長度,例如:INT(11)表示長度為11的INT類型。長度在大多數場景是沒有意義的,它不會限制值的合法範圍,只會影響顯示字符的個數,而且需要和UNSIGNED ZEROFILL屬性配合使用才有意義。


例子,假定類型設定為INT(5),屬性為UNSIGNED ZEROFILL,如果用戶插入的數據為12的話,那麼數據庫實際存儲數據為00012。


· 2、實數類型,包括FLOAT、DOUBLE、DECIMAL。


DECIMAL可以用於存儲比BIGINT還大的整型,能存儲精確的小數。


而FLOAT和DOUBLE是有取值範圍的,並支持使用標準的浮點進行近似計算。


計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串進行處理。


MySQL面試題-數據類型


· 3、字符串類型,包括VARCHAR、CHAR、TEXT、BLOB
VARCHAR用於存儲可變長字符串,它比定長類型更節省空間。


VARCHAR使用額外1或2個字節存儲字符串長度。列長度小於255字節時,使用1字節表示,否則使用2字節表示。


VARCHAR存儲的內容超出設置的長度時,內容會被截斷。


CHAR是定長的,根據定義的字符串長度分配足夠的空間。


CHAR會根據需要使用空格進行填充方便比較。


CHAR適合存儲很短的字符串,或者所有值都接近同一個長度。


CHAR存儲的內容超出設置的長度時,內容同樣會被截斷。


使用策略:


對於經常變更的數據來說,CHAR比VARCHAR更好,因為CHAR不容易產生碎片。


對於非常短的列,CHAR比VARCHAR在存儲空間上更有效率。


使用時要注意只分配需要的空間,更長的列排序時會消耗更多內存。


儘量避免使用TEXT/BLOB類型,查詢時會使用臨時表,導致嚴重的性能開銷。


· 4、枚舉類型(ENUM),把不重複的數據存儲為一個預定義的集合。


有時可以使用ENUM代替常用的字符串類型。


ENUM存儲非常緊湊,會把列表值壓縮到一個或兩個字節。


ENUM在內部存儲時,其實存的是整數。


儘量避免使用數字作為ENUM枚舉的常量,因為容易混亂。


排序是按照內部存儲的整數


· 5、日期和時間類型,儘量使用timestamp,空間效率高於datetime,


用整數保存時間戳通常不方便處理。


如果需要存儲微妙,可以使用bigint存儲。


看到這裡,這道真題是不是就比較容易回答了。


MySQL面試題-數據類型



分享到:


相關文章: