mysql數據類型總結

數據類型優化
1、儘量使用能正常存儲數據的最小數據類型(更快,佔用更少的磁盤、內存和cpu)
2、儘量使用簡單類型。(如整型比字符操作代價低)
3、儘量避免使用NULL(可以通過加默認值設置not null)

數據類型:支持別名,如integer,bool,numeric
1、時間
DATETIME和TIMESTAMP都精確到秒。通常應該儘量使用timestamp。
datetime
能保存大範圍的值,從1001年到9999年把日期和時間封裝到格式YYYYMMDDHHMMSS的整數中,與時區無關。使用8個字節的存儲空間。
timestamp
存儲秒數,只用4個字節,範圍比datetime小:只能表示從1970到2038年。日期的顯示依賴於時區。
默認爲not null,如果插入時沒有指定值,則默認值爲當前時間。

2、整型
tinyint(8位),smallint(16位),mediumint(24位),int(32位),bigint(64位)
整型有可選的unsigned屬性,表示正數
整數計算一般使用64位的bigint
可以爲整數指定寬度(只是爲用來規定mysql的交互工具顯示字符的個數,不會限制值的合法範圍

3、實數
精確類型:float,double(不適合用於貨幣的計算)
不精確類型:decimal,decimal只是一種存儲格式,在計算中decimal會轉換成double類型
可以指定精度,指定小數點前後所允許的最大位數
建議只使用數據類型,不要指定精度
4、字符串類型
char 
當存儲爲char類型時,mysql會刪除所有的末尾空格(檢索時),char值會根據需要採用空格進行填充以方便比較。
適合存儲很短的字符串或者所有值接近同樣的長度,經常變更的數據也更適合用char存儲
varchar
僅使用必要的空間,但有一種情況例外,即若建表時使用row_format=fixed,則每一行都使用定長存儲
需要1或2個額外字節記錄字符串長度(若列最大長度小於等於255,只需要一個字節,依次類推)
適用情況:
  • 字符串列最大長度比平均長度大很多
  • 列更新少,不存在碎片問題
  • 使用了像utf-8這樣複雜的字符集,每個字符都使用不同的字節數來存儲
binary和varbinary存儲二進制字符串(字節碼),填充binary使用'\0'填充,檢索時也會去掉填充值

5、BLOB和TEXT類型
二進制方式存儲:tinyblob,smallblob(blob的同義詞),mediumblob,longblob
字符方式存儲:tinytext,smalltext(text的同義詞),mediumtext,longtext

6、使用枚舉(ENUM)代替字符串類型
存儲時非常緊湊,會根據列表值的數量壓縮到一個或兩個字節中
create table enum_test(
     e enum('fish','apple','dog') not null
)
insert into enum_test(e) values('fish'),('dog'),('apple')
數據插入後存放在表中的數據實際上是整數而不是字符串。
7、位數據類型
bit
bit(1)定義一個包含單個位的字段,bit(2)存儲兩個位。bit列的最大長度是64位。
mysql把bit當作字符串類型,而不是數字類型。
最好避免使用這種類型,如果要用一個bit存儲一個true/false值,替代方法是創建一個char(0),可以保存空值NULL或者長度爲0的字符串。
set
保存很多true/false值的集合
例如
create table acl(
     perms set('can_read','can_write','can_delete') not null
)
insert into acl(perms) values('can_read,can_delete');
優點:有效利用存儲空間,可以使用find_in_set()等函數
缺點:改變列定義的代價太高:需要alter table,對大表來說非常昂貴。而且無法在set列上通過索引查找

參考:《高性能Mysql》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章