Laravel数据库数据插入报错原因咨询(datetime格式异常)
Laravel插入数据时Datetime格式错误问题分析
嘿,我来帮你排查这个报错的原因~
首先看你在tinker里执行的插入代码:
DB::table('users')->insert(['id'=>'1','name'=>'admin','email'=>'mihiran.chathuranga@gmail.com','remember_token'=>'1','created_at'=>' ','updated_at' => ' ']);
对应的错误信息是:
Illuminate/Database/QueryException with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: ' ' for column 'created_at' at row 1 (SQL: insert into `users` (`id`, `name`, `email`, `remember_token`, `created_at`, `updated_at`) values (1, admin, mihiran.chathuranga@gmail.com, 1, , ))'
报错原因
核心问题出在created_at和updated_at这两个字段上:
- 这两个字段在Laravel默认的
users表中是datetime/timestamp类型,MySQL对这类字段的格式有严格要求,必须是YYYY-MM-DD HH:MM:SS这种标准格式的字符串,或是合法的时间值。 - 你传入的是空格
' ',完全不符合datetime的格式规范,MySQL无法解析,因此抛出了Invalid datetime format的错误。
解决办法
给你几个实用的解决思路:
- 让Laravel自动维护时间戳:如果你的
User模型保留了默认的$timestamps = true;(这是Laravel默认配置),插入数据时可以直接省略created_at和updated_at字段,Laravel会自动帮你填充当前时间戳。示例代码:DB::table('users')->insert(['id'=>'1','name'=>'admin','email'=>'mihiran.chathuranga@gmail.com','remember_token'=>'1']); - 手动传入合法时间:如果一定要手动指定时间,可以用Laravel自带的Carbon类生成标准时间,或是直接写入符合格式的字符串:
// 用Carbon生成当前时间 DB::table('users')->insert([ 'id'=>'1', 'name'=>'admin', 'email'=>'mihiran.chathuranga@gmail.com', 'remember_token'=>'1', 'created_at' => \Carbon\Carbon::now(), 'updated_at' => \Carbon\Carbon::now() ]); // 或者直接写入标准格式字符串 DB::table('users')->insert([ 'id'=>'1', 'name'=>'admin', 'email'=>'mihiran.chathuranga@gmail.com', 'remember_token'=>'1', 'created_at' => '2024-05-20 14:30:00', 'updated_at' => '2024-05-20 14:30:00' ]);
内容的提问来源于stack exchange,提问作者mihiran
相关产品推荐
相关产品推荐

