首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 零日期 '0000-00-00' 導致 Java SQLException 解決方案

     編輯:MySQL 綜合教學

MySQL 零日期 '0000-00-00' 導致 Java SQLException 解決方案

當 MySQL 表中 DATE 或 DATETIME 欄位預設值為 '0000-00-00 00:00:00' 時,使用 JDBC PreparedStatement 配合 ResultSet.getDate() 讀取會拋出異常:

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date

問題根因

MySQL 允許「零日期」作為合法預設值,但 java.sql.Date 類別不承認此格式,導致型別轉換失敗。這在舊系統遷移或未嚴格規範 DDL 時常見。

解決方案:JDBC 連線參數 zeroDateTimeBehavior

在 JDBC URL 中加入此參數,指定遇到零日期時的轉換策略:

方案 1:轉換為合法最小日期 '0001-01-01 00:00:00'

String url = "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=round";

適用於業務邏輯需保留日期欄位非空特性的場景。

方案 2:直接轉換為 NULL

String url = "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull";

適用於業務允許日期為空,且後續程式碼已處理 NULL 判斷的場景。

補充說明

  • MySQL Connector/J 5.1.4+ 版本支援此參數;8.0 版本預設行為已改為 convertToNull,若仍需舊行為請顯式指定 round。
  • 若不想修改連線字串,也可在資料庫層面將零日期修正為合法日期或 NULL,並調整應用層邏輯。
  • 建議新專案在建表時直接使用 DEFAULT CURRENT_TIMESTAMP 或 DEFAULT NULL,避免零日期產生。

快速驗證

修改 URL 後重啟應用,執行查詢測試:

SELECT date_col FROM test_table WHERE date_col = '0000-00-00';

若無拋出異常且回傳預期值(0001-01-01 或 NULL),即表示配置生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved