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年
Logo

更多推荐