1. 程式人生 > >資料型別的選擇

資料型別的選擇

資料型別選擇原則

1. 小

儘量使用可以正確儲存資料的最小資料型別。
注意:應儘早確定資料型別,不然後期改起來很麻煩

2. 簡單

整型比字元操作代價更低。
用 MySQL 內建的型別(date,time,datetime)儲存日期時間。
用整型儲存 IP 地址。

3. 儘量避免 NULL

索引列應避免 NULL。
例外:InnoDB 使用單獨的位(bit)儲存 NULL 值,因此對於稀疏資料1有很好的空間效率。


型別比較

1. 整數型別

型別 儲存空間(bit) 位元組數(Byte) 數字的儲存範圍(-2n-1
~ 2n-1-1)
TINYINT 8 1 -128 ~ 127
SMALLINT 16 2 -32768 ~ 32767
MEDIUMINT 24 3 -8388608 ~ 8388607
INT 32 4 -2147483648 ~ 2147483647
BIGINT 64 8 -9223372036854775808 ~ 9223372036854775807

整數型別有可選的 UNSIGNED 屬性,表示不允許負值,可使正數上限提高一倍。例如 TINYINT UNSIGNED 儲存範圍是 0 ~ 255。
INT(11) 中的 11 表示顯示寬度2,跟儲存範圍無關。詳見:「MYSQL」MYSQL中的int(11)到底代表什麼意思?

2. 實數型別

MySQL型別float double decimal的區別
因為需要額外的空間和計算開銷,所以應該儘量只在對小數進行精確計算時才使用 DECIMAL。資料量較大時,可用 BIGINT 代替,將需要儲存的貨幣單位根據小數的位數乘以相應的倍數即可,這樣可以同時避免浮點儲存計算不精確和 DECIMAL 精確計算代價高的問題。

3. 字串型別

VARCHAR 和 CHAR

MySQL中的char與varchar詳解

BLOB 和 TEXT

MySQL中TEXT與BLOB欄位型別的區別
MySQL 不能將 BLOB 和 TEXT 列全部長度的字串進行索引,也不能使用這些索引消除排序。

列舉 ENUM

MySQL列舉型別的“八宗罪”
建議:一般別用列舉

4. 日期和時間型別

MySQL中有關TIMESTAMP和DATETIME的總結
TIMESTAMP 空間效率高,儲存範圍小(1970-2038),同一資料不同時區顯示不同(適用於跨時區業務)。


  1. 列的大部分資料為 NULL。 ↩︎

  2. 當 INT 欄位型別設定為無符號且填充零(UNSIGNED ZEROFILL)時,若數值位數未達到設定的顯示寬度,會在數值前面補充零直到滿足設定的顯示寬度。 ↩︎