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

C# 連接 MySQL「無法轉換日期時間值」異常:零日期 0000-00-00 導致 System.DateTime 溢出的解決方案

     編輯:MySQL 綜合教學

異常堆棧

Unable to convert MySQL date/time value to System.DateTime

根因

表中 DATETIME/TIMESTAMP 列存在 零日期 0000-00-00 00:00:00。.NET DateTime 最小值為 0001-01-01,無法映射,驅動程序拋出轉換異常。

三種解決方案

方案一:連接字符串參數(推薦,零代碼改動)


  
  • Allow Zero Datetime=True:允許讀取零日期
  • Convert Zero Datetime=True:將零日期自動轉為 DateTime.MinValue (0001-01-01)

方案二:數據清洗(治本)

UPDATE tbl SET dt_col = '1970-01-01 00:00:00' WHERE dt_col = '0000-00-00 00:00:00';
-- 或設置列默認值
ALTER TABLE tbl MODIFY dt_col DATETIME DEFAULT '1970-01-01 00:00:00';

業務語義上「未知時間」建議用 NULL(需列允許 NULL)而非零日期。

方案三:實體類屬性用可空類型

public DateTime? CreatedAt { get; set; }  // 可接收 NULL,避免轉換異常

配合驅動程序 Allow Zero Datetime=False,零日期將映射為 null。

最佳實踐建議

  1. 表設計階段:時間列 允許 NULL,業務「未知」存 NULL,禁止零日期
  2. 遷移歷史數據:統一清洗零日期為 NULL 或業務約定基準日(如 1970-01-01)
  3. 連接字符串保留 Allow Zero Datetime=True 作為兼容兜底,但代碼層強制用 DateTime?

零日期是 MySQL 早期為兼容無效日期設計的「特產」,現代應用應徹底清除,避免跨語言、跨驅動程序的無限踩坑。

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