MySQL 的資料型別

瞭然、發表於2020-01-11

MySQL的整數型別

型別 佔用的儲存空間(單位) 無符號的取值範圍 有符合的取值範圍 定義
TINYINT 1 0 ~ 2⁸-1 -2⁷ ~ 2⁷-1 非常小的整數
SMALLINT 2 0 ~ 2¹⁶-1 -2¹⁶ ~ 2¹⁶-1 小的整數
MEDIUMINT 3 0 ~ 2²⁴-1 -2²⁴ ~ 2²⁴-1 中等整數
INT 4 0 ~ 2³²-1 -2³² ~ 2³²-1 標準的整數
BIGINT 8 0 ~ 2⁶⁴-1 -2⁶⁴ ~ 2⁶⁴-1 大整數

MySQL的浮點數型別

型別 佔用的儲存空間(單位) 絕對值最小非0值 絕對值最大非0值 定義
FLAOT 4 ±1.175494351E-38 ±3.402823466E+38 單精度浮點數
DOUBLE 8 ±2.2250738585072014E-308 ±1.7976931348623157E+308 雙精度浮點數

以單精度浮點數型別FLOAT型別為例,它的四個位元組的組成結構如下圖:

MySQL的資料型別

設定最大位數和小數位數

在定義浮點數型別時,還可以在FLOAT或者DOUBLE後面跟上兩個引數,如下

FLOAT(M, D)
DOUBLE(M, D)
  • M表示該小數最多需要的十進位制的有效數字個數
  • D表示該小數的小數點後的十進位制數字個數
型別 取值範圍
FLOAT(4, 0) -9999 ~ 9999
FLOAT(4, 2) -99.96 ~ 99.99
FLOAT(4, 1) -999.9 ~ 999.9
FLOAT(5, 1) -9999.9 ~ 9999.9
FLOAT(6, 1) -99999.9 ~ 99999.9
  • 在D相同的情況下,M越大,該型別的取值範圍越大;在M相同的情況下,D越大,該型別的取值範圍越小。
  • M的取值範圍是1~255,D的取值範圍是0~30,而且D的值必須不大於M。M和D都是可選的,如果我們省略了它們,那它們的值按照機器支援的最大值來儲存。

MySQL的定點數型別

  • 因為用浮點數表示小數可能會有不精確的情況,在一些情況下我們必須保證小數是精確的,所以MySQL提出一種稱之為定點數的資料型別,它也是儲存小數的一種方式。
型別 佔用的儲存空間(單位:位元組) 取值範圍
DECLMAL 取決於M和D 取決於M和D

儲存空間

以DECLMAL(12, 4)為例

  • 首先確定小數點左邊的整數最多需要儲存的十進位制位數是12位,小數點右邊的整數需要儲存的十進位制位數是4位,如圖所示:

MySQL的資料型別

  • 從小數點位置出發,每個整數每隔9個十進位制位劃分為1組,效果就是這樣:

MySQL的資料型別

  • 針對每個組中的十進位制數字,將其轉換為二進位制數字進行儲存,根據組中包含的十進位制數字位數不同,所需的儲存空間大小也不同,具體見下表:
組中包含的十進位制位數 佔用的儲存空間 單位(位元組)
1或2 1
3或4 2
5或6 3
7或8 4
  • M的範圍是1 ~ 65,D的範圍是0 ~ 30,且D的值不能超過M。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章