MySql Incorrect datetime value: '' for column 'dateTime' at row 1
错误内容:Incorrect datetime value: ” for column ‘dateTime’ at row 1Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: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 解决方案
-
- 更新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年
更多推荐
已为社区贡献1条内容
所有评论(0)