文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  DECIMAL 資料類型特性

14.24.2 DECIMAL 資料類型特性

本節討論 DECIMAL 資料類型 (及其同義詞) 的特性,特別是關於以下主題

  • 最大位數

  • 儲存格式

  • 儲存需求

  • MySQL 對於 DECIMAL 資料行上限範圍的非標準擴充

用於 DECIMAL 資料行的宣告語法是 DECIMAL(M,D)。引數的值範圍如下

  • M 是最大位數 (精確度)。其範圍為 1 到 65。

  • D 是小數點右邊的位數 (小數位數)。其範圍為 0 到 30,且不得大於 M

如果省略 D,則預設值為 0。如果省略 M,則預設值為 10。

M 的最大值 65 表示 DECIMAL 值的計算精確度最高可達 65 位數。此 65 位數精確度的限制也適用於精確值數值常值,因此此類常值的最大範圍與之前不同。(對於 DECIMAL 常值的文字長度也有限制;請參閱 章節 14.24.3,「表達式處理」。)

DECIMAL 資料行的值會以二進位格式儲存,該格式將 9 個十進位數字壓縮到 4 個位元組中。每個值的整數和小數部分所需的儲存空間是分開決定的。每 9 個數字的倍數需要 4 個位元組,而任何剩餘的數字則需要 4 個位元組的一部分。剩餘數字所需的儲存空間由下表給出。

剩餘數字 位元組數
0 0
1–2 1
3–4 2
5–6 3
7–9 4

例如,DECIMAL(18,9) 資料行在小數點的任一側都有 9 個數字,因此整數部分和小數部分各需要 4 個位元組。DECIMAL(20,6) 資料行有 14 個整數位數和 6 個小數位數。整數位數中的 9 個數字需要 4 個位元組,而剩餘的 5 個數字需要 3 個位元組。6 個小數位數需要 3 個位元組。

DECIMAL 資料行不會儲存開頭的 + 字元或 - 字元或開頭的 0 數字。如果將 +0003.1 插入到 DECIMAL(5,1) 資料行中,則會以 3.1 的形式儲存。對於負數,不會儲存常值 - 字元。

DECIMAL 資料行不允許值大於資料行定義所暗示的範圍。例如,DECIMAL(3,0) 資料行支援的範圍為 -999999DECIMAL(M,D) 資料行允許小數點左邊最多有 M - D 個位數。

SQL 標準要求 NUMERIC(M,D) 的精確度必須完全M 位數。對於 DECIMAL(M,D),標準要求精確度至少為 M 位數,但允許更多位數。在 MySQL 中,DECIMAL(M,D)NUMERIC(M,D) 是相同的,並且兩者的精確度都正好是 M 位數。

如需 DECIMAL 值內部格式的完整說明,請參閱 MySQL 原始碼發行版中的 strings/decimal.c 檔案。格式在 decimal2bin() 函式中說明(並提供範例)。