MySql Incorrect datetime value: '' for column 'dateTime' at row 1
阿新 • • 發佈:2019-02-05
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 解決方案
- 更新jar包
mysql-connector-java-5.1.31.jar 把該jar包更新的最新
- 更新jar包
- 將插入的時間格式化
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)));
- 檢查主機時間是否超過了2037年,如果超過將其改為小於等於2037年