【问题标题】:Invalid datetime format: 1292 Incorrect datetime value - Laravel 5.2日期时间格式无效:1292 日期时间值不正确 - Laravel 5.2
【发布时间】:2017-11-08 14:20:43
【问题描述】:

当我将这些值插入我的数据库表时出现此错误:

SQLSTATE[22007]:无效的日期时间格式:1292 不正确的日期时间值: 第 1 行的“registration_from”列的“24/06/2017” (SQL:插入`campus_registrations`(`campus_major_class_id`, `registration_from`, `registration_to`, `testing`, `announcement`, `enrollment_from`, `enrollment_to`, `updated_at`, `created_at`) 值 (3, 2017 年 6 月 24 日、2017 年 6 月 27 日、2017 年 7 月 13 日、2017 年 1 月 8 日、2017 年 5 月 9 日、2018 年 1 月 31 日、 2017-06-07 09:39:31, 2017-06-07 09:39:31))

我必须先启动日期时间还是什么?

【问题讨论】:

  • 首先将您的表架构添加到问题中。
  • @kRicha 他们都是日期时间
  • @goateee25 尝试使用这种格式date("Y-m-d H:i:s")

标签: php mysql laravel


【解决方案1】:

如果该列的默认设置为 NULL,您可能可以在代码中执行以下操作:

$model->column = NULL;

【讨论】:

    【解决方案2】:
    1. 我在新迁移中删除了问题列:

    $table->dropColumn('time_to_deliver');

    1. 创建了新的迁移文件,现在将 'timestamp' 替换为 'time' 作为类型:

    $table->time('time_to_deliver')->nullable()->after('date_to_deliver');

    1. 在下一个迁移文件中已经完成下一个(循环内):

    $orderLcl = new Order;// a Model

    $orderLcl->time_to_deliver = date("H:i",$mock_timestampLcl);

    .....
    $orderLcl->save();
    

    【讨论】:

      【解决方案3】:

      不要忘记 Y2K38(2038 年问题) -

      timestamp 的限制为 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC(来源),而 dateTime 的范围为 1000-01-01 00:00:00 到 9999-12-31 23:59:59,因此请考虑您之前计划在该字段中存储的内容确定使用哪种类型。

      timestamp 和 dateTime 相似 - 它们将日期 (YYYY-MM-DD) 和时间 (HH:MM:SS) 一起存储在单个字段中,即 YYYY-MM-DD HH:MM:SS。两者之间的区别在于,无论何时更新数据库记录,timestamp 都可以使用(MySQL 的)CURRENT_TIMESTAMP 作为其值。这可以在数据库级别处理,非常适合 Laravel 的 created_at 和 updated_at 字段。

      date 仅存储日期组件,即 YYYY-MM-DD(1000-00-01 到 9999-12-31)。

      timestamps 不带参数,它是将created_at 和updated_at 时间戳字段添加到数据库的快捷方式。

      所以在时间戳上设置一个大于2038-01-19 03:14:07 UTC 的日期也会抛出 - SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value

      【讨论】:

      • 有人知道这个 Y2K38 是否会更新到更大的范围吗?不过不错! 谢谢。
      • 有解决这个问题的办法here
      【解决方案4】:

      这在 laravel 5.6 下发生在我身上,直到我将代码更改为 $table->date('last_date')->default(now());

      【讨论】:

        【解决方案5】:

        我在尝试将用户从 vue js 前端注册到 laravel 后端 API 时遇到了同样的错误。

        解决方案是将 mysql 严格模式更新为 false。如果有人知道这种方法的缺点,请留下您的 cmets!

        //config/database.php
        'mysql' => [
            'strict' => false,
        ]
        

        【讨论】:

        • 缺点是如果日期与Y-m-d这种格式不匹配,MySQL不会抛出错误,而是插入类似这样的内容来代替提供的日期0000-00-00。跨度>
        【解决方案6】:

        我遇到了同样的问题,最后我解决了问题。你可以在add.blade.php的末尾添加几行代码

         $('.date-picker').datepicker({
                        format: 'yy/mm/dd',
                        autoclose: true,
                        todayHighlight: true
                    });
        

        【讨论】:

          【解决方案7】:

          由于您没有使用标准日期时间格式,因此每个日期都使用define a mutator。例如:

          public function setRegistrationFromAttribute($value)
          {
              $this->attributes['registration_from'] =  Carbon::parse($value);
          }
          

          【讨论】:

            【解决方案8】:

            Reference

            MYSQL 可以识别YYYY-MM-DD 或YY-MM-DD 格式的日期值。您可以使用/。此24/06/2017 被视为无效。试试2017/06/24

            【讨论】:

              【解决方案9】:

              错误在这里:

              Incorrect datetime value: '24/06/2017' for column 'registration_from' at row 1
              

              mysql 中date 列的默认格式为Y-m-d,datetime 的默认格式为Y-m-d H:i:s。所以把你的日期改成这种格式,然后再试一次。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-08-26
                • 2017-07-18
                • 2020-01-19
                • 2017-12-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多