【问题标题】:Invalid datetime format: 1292 When using old dates无效的日期时间格式:1292 使用旧日期时
【发布时间】:2020-03-10 04:19:54
【问题描述】:

我有 people 表,其中我有一个名为生日的字段作为时间戳。

当我插入日期数据时:2017-05-19 没问题,没有错误,但是当我想插入一些旧日期时,如 1959-08-12 它说:

Invalid datetime format: 1292 Incorrect datetime value: '1959-08-12' for column 'birthday' at row 1

我这样插入日期:

Person::create([
...
  'birthday'   => date('Y-m-d' , strtotime($birthday)),
...
])

我也试试这个question/answer 并从sql_mode 变量中删除NO_ZERO_IN_DATE,NO_ZERO_DATE,但对我不起作用。

MySQL:5.7.23 PHP: 7.2 Laravel:6.5

【问题讨论】:

  • 确保服务器和 MySQL 的时区相同。如果 MySQL 不在正确的时区,您可以使用 SET GLOBAL time_zone = timezone; 更新它

标签: php mysql laravel date timestamp


【解决方案1】:

我猜birthday 列的数据类型为 TIMESTAMP,其范围为 1970-01-01 00:00:01 到 2038-01-19 03:14:07,UTC。

create table t(birthday timestamp);
insert into t values ('1970-01-02');
/* Affected rows: 1  Found rows: 0  Warnings: 0  Duration for 1 query: 0.094 sec. */
insert into t values ('1969-12-30');
/* SQL Error (1292): Incorrect datetime value: '1969-12-30' for column 'birthday' at row 1 */

我建议对生日使用DATE 数据类型,因为它不包含时间部分并且具有更大的范围 1000-01-01 到 9999-12-31。

【讨论】:

    【解决方案2】:

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

    或者

    试试这个,使用 Carbon 对象解析 date。

    Person::create([
    ...
      'birthday'   => Carbon::parse($birthday),
    ...
    ])
    

    【讨论】:

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