|
Java 類型
|
MySQL 推薦類型 |
核心用途 |
注意事項
|
|
整數型 |
|||
|
|
|
小範圍整數 |
範圍:-128~127 |
|
|
|
中等範圍整數(如序號) |
較少直接使用,優先用 INT,範圍: -32768~32767 |
|
|
|
最常用整數(ID、計數)
|
跨庫兼容性最好,範圍:-2147483648~2147483647 |
|
|
|
大範圍整數(時間戳、大 ID)
|
範圍:-9223372036854775808~9223372036854775807 |
|
浮點型 / 高精度型 |
|||
|
|
|
低精度浮點數(圖形、非核心計算)
|
精度僅 6-7 位,避免用於金額、計算
|
|
|
|
普通精度浮點數(非金額計算)
|
精度 15-17 位,仍可能有精度丟失(如 0.1+0.2)
|
|
|
|
高精度計算(金額、税率)
|
避免了浮點數精度問題, |
|
字符 / 字符串型 |
|||
|
|
|
單個字符(性別 M/F、狀態 Y/N)
|
固定長度 1,多餘字符補空格,適合單字符場景
|
|
|
|
變長字符串(姓名、描述)
|
n 是字符串長度,最大長度和字符集有關,總字節數不能超過 65535字節 |
|
|
|
超長文本(備註、文章內容)
|
|
|
布爾型 |
|||
|
|
|
邏輯判斷(是否啓用、是否刪除) |
|
|
日期時間型 |
|||
|
|
|
僅日期 |
|
|
|
|
僅時間 |
|
|
|
|
日期 + 時間 |
DATETIME 因無時區隱式轉換的特性,是更安全的選擇;TIMESTAMP 僅在明確需要跨時區或自動更新時使用,且務必統一時區配置。 |
|
二進制型 |
|||
|
|
|
二進制數據(圖片、文件)
|
不推薦數據庫存大文件!小文件(如頭像 < 100KB)可用,大文件建議存 OSS,數據庫存文件 URL |
BigDecimal 正確使用規範(避免所有精度問題)
- 構造優先用字符串:new BigDecimal("0.1") 或 BigDecimal.valueOf(0.1),禁用 new BigDecimal(double)。若通過 new BigDecimal(double) 構造對象,會將 double 的精度丟失一併帶入,導致後續計算錯誤。
- 運算指定舍入模式:除法(divide)必須指定 (scale, roundingMode),乘法(multiply)、減法(subtract)按需指定精度;
- 比較用 compareTo():禁止用 equals() 比較數值相等。BigDecimal 的 equals() 方法會同時比較數值和精度,而 compareTo() 僅比較數值,用錯會導致邏輯錯誤。
- 金額場景固定小數位數:如金額統一保留 2 位小數,避免精度不一致;
- 避免頻繁轉換:減少 BigDecimal 與 double/float 的互轉,若必須轉換,先轉為字符串。
|
舍入模式
|
説明(適合場景)
|
|
|
四捨五入(日常計算、金額)
|
|
|
向下取整(如取整、不進位)
|
|
|
向上取整(如計費、不足 1 元按 1 元算)
|
|
|
銀行家舍入(四捨六入五取偶,金融場景)
|