數值類型
類型 | 占用的儲存空間 (單位) | 無符號的取值范圍 | 有符合的取值范圍 | 定義 |
---|---|---|---|---|
TINYINT | 1 | 0 ~ 2?-1 | -2? ~ 2?-1 | 非常小的整數 |
SMALLINT | 2 | 0 ~ 21?-1 | -21? ~ 21?-1 | 小的整數 |
MEDIUMINT | 3 | 0 ~ 22?-1 | -22? ~ 22?-1 | 中等整數 |
INT | 4 | 0 ~ 232-1 | -232 ~ 232-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 類型為例,它的四個字節的組成結構如下圖:
設置最大位數和小數位數
在定義浮點數類型時,還可以在 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 位,如圖所示:
從小數點位置出發,每個整數每隔 9 個十進制位劃分為 1 組,效果就是這樣:
針對每個組中的十進制數字,將其轉換為二進制數字進行存儲,根據組中包含的十進制數字位數不同,所需的存儲空間大小也不同,具體見下表:
組中包含的十進制位數 | 占用的儲存空間 單位 (字節) |
---|---|
1 或 2 | 1 |
3 或 4 | 2 |
5 或 6 | 3 |
7 或 8 | 4 |
M 的范圍是 1 ~ 65,D 的范圍是 0 ~ 30,且 D 的值不能超過 M。
推薦教程:《MySQL教程》
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END