資料表欄位為大寫 NAME、CODE、ID。JSP 頁面中:
rst.getString("NAME") → 瀏覽器無資料rst.getString("name") → 正常顯示但 Java 控制台程式中,大小寫皆可正常取得資料。
lower_case_table_names=0)lower_case_table_names=1)lower_case_table_names=2,儲存按原大小寫但比較不敏感)| 環境 | 驅動版本 | ResultSet.getString() 行為 |
|---|---|---|
| JSP (Tomcat + JDBC) | 較新版 (5.1.38+ / 8.0+) | 嚴格區分大小寫,需與資料庫中繼資料完全一致 |
| Java 控制台 | 較舊版或相同版但不同配置 | 可能內部正規化為小寫,或 ResultSetMetaData 回傳小寫 |
getColumnName():回傳資料庫定義的原始欄位名(保留大小寫)getColumnLabel():回傳別名或標籤,某些驅動會正規化getColumnLabel(),但實作不一ResultSetMetaData meta = rst.getMetaData();
for (int i = 1; i <= meta.getColumnCount(); i++) {
System.out.println("Column " + i + ": name=" + meta.getColumnName(i)
+ ", label=" + meta.getColumnLabel(i));
}
在 JSP 與 Java 控制台分別執行,比較輸出差異。
name、code、id,程式碼全用小寫,跨平台零困擾"NAME",並在連線字串加 useColumnNamesInFindColumn=true(MySQL Connector/J 8.0+)lower_case_table_names=1 強制不敏感(需重啟且影響現有表)JSP 與 Java 控制台大小寫行為不一,源於JDBC 驅動版本/配置差異導致 ResultSetMetaData 回傳值不同。根治之道是資料庫層面統一小寫命名慣例,應用層同步調整,徹底消除跨環境移植風險。