JFinal 中 getInt() / getLong() 對應 MySQL INT 型別時,UNSIGNED 屬性決定呼叫哪個方法,用錯會拋型別不匹配錯誤。
| 屬性 | 範圍 | 位元組 |
|---|---|---|
| SIGNED (預設) | -2,147,483,648 ~ 2,147,483,647 | 4 |
| UNSIGNED | 0 ~ 4,294,967,295 | 4 |
INT(11):SIGNED 最大 10 位數 + 1 位負號 = 11,合理INT(11) UNSIGNED:最大 10 位數,M=11 無意義,專業寫法應為 INT(10) UNSIGNED/** MySQL: int, integer, tinyint(n>1), smallint, mediumint */
public Integer getInt(String attr) { return (Integer)attrs.get(attr); }
/** MySQL: bigint, unsigned int */
public Long getLong(String attr) { return (Long)attrs.get(attr); }
System.out.println(Integer.MAX_VALUE); // 2,147,483,647
// 4,294,967,295 > Integer.MAX_VALUE → 需用 Long
| MySQL 定義 | JFinal 呼叫 | 原因 |
|---|---|---|
INT / INT SIGNED |
getInt() |
範圍在 Java int 內 |
INT UNSIGNED |
getLong() |
最大值 42.9 億 > int 上限 21.4 億 |
BIGINT |
getLong() |
64 位整數 |
💡 一句話心法:MySQL INT UNSIGNED 超出 Java int 範圍,**JFinal 必須用 getLong()**,否則溢位報錯。