1. 程式人生 > >MySql Incorrect datetime value: '' for column 'dateTime' at row 1

MySql Incorrect datetime value: '' for column 'dateTime' at row 1

1 錯誤內容:Incorrect datetime value: ” for column ‘dateTime’ at row 1
    Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: 
Incorrect datetime value: '' for column 'dateTime' at row 1
    ... 109 more  
2 錯誤原因
  • mysql的問題

Mysql5.x以上版本出現報錯#1929 Incorrect datetime value: ”” for column
”createtime” 5以上的版本如果時期時間是空值應該要寫NULL; 官方解釋說:得知新版本mysql對空值插入有”bug”,
要在安裝mysql的時候去除預設勾選的enable strict SQL mode

  • 2038年問題

Laravel 這樣做估計是為了利用 MySQL 的 CURRENT_TIMESTAMP 方法,從資料庫層面去維護 created_at 和
updated_at ,參考 Illuminate/Database 原始碼中 MYSQL 建立 Timestamp 型別欄位程式碼。 到時候
2038 的時候,估計那個時候 Laravel 13 LTE (按大概每 2~3 年一個 LTE
版本釋出)已經有很簡單的方法來解決這個問題。

是因為在 Mysql 中 timestamp 型別通常作為記錄資料建立時間,資料更新時間的,所以 laravel
用這個型別非常正確。如果你某些欄位確實需要一些特殊的時間值,那麼就用 datetime 毫無疑問無疑。

3 解決方案
    1. 更新jar包
      mysql-connector-java-5.1.31.jar 把該jar包更新的最新
    1. 將插入的時間格式化
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.sql.Timestamp;  
//取當前時間  
Date nowdate=new Date();  
//轉換時間格式  
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
user.setCreateTime(Timestamp.valueOf(simpleDate.format(nowdate)));  
user.setExpireTime(Timestamp.valueOf(simpleDate.format(nowdate)));
    1. 檢查主機時間是否超過了2037年,如果超過將其改為小於等於2037年