首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 儲存表單複選框值:後端屬性型別選擇

     編輯:程式設計綜合問答

前端提交行為

<input type="checkbox" name="hobby" value="1"> 多個同名 checkbox:

  • 勾選項:提交 hobby=1&hobby=3 (多筆同名參數)。
  • 未勾選:**完全不提交該參數名**。

後端接收型別對照

資料庫儲存策略

  1. 關聯表 (正規化,推薦):
    user_hobby (user_id, hobby_id) -- hobby_id 參照 hobby_dict
    
    優點:查詢靈活、支援外鍵、擴充性佳。
  2. JSON 欄位 (MySQL 5.7+ / PostgreSQL):
    hobbies JSON -- 存 ["1","3"]
    
    優點:無需額外表、結構彈性。缺點:SQL 查詢較複雜。
  3. 逗號分隔字串 (不推薦):
    hobbies VARCHAR(255) -- 存 "1,3"
    
    缺點:查詢需 FIND_IN_SET/LIKE、難以索引、維護麻煩。

實體類別屬性定義 (Java 範例)


@Entity
public class User {
    @Id Long id;
    
    @ElementCollection // JPA 映射集合至關聯表
    @CollectionTable(name = "user_hobby", joinColumns = @JoinColumn(name = "user_id"))
    @Column(name = "hobby_id")
    private Set hobbies = new HashSet<>(); // 或 List
    
    // getter/setter
}

關鍵提醒

  • 未勾選任何項時:後端接收到 null 或空陣列,**務必處理**,否則更新時可能誤清空舊資料。
  • 前端建議加隱藏欄位 <input type="hidden" name="hobby" value=""> 確保參數存在 (部分框架需要)。
  • 資料庫層面加 CHECK (JSON_VALID(hobbies)) 保證 JSON 格式。

Spring MVC 直接用 List<String> 接收,配合 JPA @ElementCollection 存關聯表,是處理複選框最標準的做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
框架/語言接收型別說明
Spring MVC / Spring BootString[] hobby 或 List<String> hobby自動綁定同名參數為陣列/列表
Struts 2String[] hobby 或 List<String> hobby同名參數自動轉換
Servlet 原生request.getParameterValues("hobby") → String[]手動處理
PHP$_POST['hobby'] 為陣列 (若名為 hobby[])名稱需加 []
Node.js (Express + body-parser)req.body.hobby 為陣列自動解析