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

MySQL 5.x 升級 5.7 後匯入舊資料 DATE 錯誤解決方法

     編輯:MySQL 綜合教學

MySQL 5.x 升級 5.7 後匯入舊資料 DATE 錯誤解決方法

MySQL 5.7 預設啟用嚴格 SQL 模式(STRICT_TRANS_TABLES),導致匯入舊版資料時,DATE/DATETIME 零值(0000-00-00)或不合法日期報錯。解決方法是調整 sql_mode。

Linux 環境

# 找到設定檔(通常在 /etc/my.cnf 或 /usr/share/mysql/my-default.cnf)
vi /etc/my.cnf

# 找到 sql_mode 設定行,註解或移除
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 重啟服務
systemctl restart mysqld

Windows 32 位元

# 編輯安裝目錄下的 my.ini
# 找到:
# sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 註解或刪除該行,重啟服務

Windows 64 位元

# 設定檔位於隱藏資料夾:
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

# 同樣註解或移除 sql-mode 行,重啟服務

建議做法

  • 暫時關閉嚴格模式完成匯入
  • 匯入後啟用嚴格模式,並清理資料(將零值日期轉為 NULL 或合法預設值)
  • 長期應修正應用程式寫入邏輯,避免產生非法日期

相關 SQL 模式說明

模式效果
STRICT_TRANS_TABLES交易表嚴格模式,非法值報錯回滾
NO_ZERO_DATE不允許 '0000-00-00' 日期
NO_ZERO_IN_DATE不允許月/日為 0 的日期
ERROR_FOR_DIVISION_BY_ZERO除以零報錯而非回傳 NULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved