官方文檔明確:NUMERIC 是 DECIMAL 的同義詞,兩者功能完全等效,用於**精確數值存儲** (定點數),避免浮點數誤差。
DECIMAL(M, D) / NUMERIC(M, D) M (Precision): 總有效數字位數 (1~65,MySQL 5.0.6+),不含小數點與符號 D (Scale) : 小數點後位數 (0~30,且 D ≤ M) 默認: DECIMAL(10,0)
規則:0 ≤ D ≤ M ≤ 65 (舊版本 M ≤ 38)。
DECIMAL(5,5) 與 DECIMAL(5,0) 是不同類型,CAST/CONVERT 間屬類型轉換。CREATE TABLE ta (a FLOAT, b DECIMAL(10,5)); -- 測試 1: 小數位超出截斷 INSERT INTO ta (a,b) VALUES (1, 12345.123423); -- 實際存入 b: 12345.12342 (截斷不四捨五入) -- 測試 2: 整數位超出範圍飽和 INSERT INTO ta (a,b) VALUES (1, 123456.1234); -- 實際存入 b: 99999.99999 (整數部分 5 位上限 99999,小數位填滿 9)
SHOW CREATE TABLE 顯示均為 DECIMAL)。DECIMAL(19,4) 或 DECIMAL(15,2),覆蓋萬億級金額分精度。DECIMAL → FLOAT/DOUBLE:可能損失精度。INT/FLOAT → DECIMAL:超出範圍導致溢出 (報錯或飽和取決於 SQL Mode)。12.345 自動轉為 DECIMAL(5,3) (最小精度)。