解决Navicat运行sql文件报错:1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘created_at‘ at

骑猪看日落 2022-10-05 10:57 274阅读 0赞

1. 错误提示

  1. [ERR] 1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_at' at row 1

2. 问题分析

  • 从上面的描述我们可以看出原因是:我们给类型是datetime的xxx字段赋值0000-00-00 00:00:00是不被支持的,赋值包含两种情况:

    • 情况一:我们运行的sql文件直接提供的值就是0000-00-00 00:00:00
    • 情况二:xxx字段我们没有提供值,默认值是0000-00-00 00:00:00

3. 原因分析

原因是我们的数据库不支持datetime为0的情况,这是一个模式的设置。

4. 具体解决

4.1 查看sql_mode

  1. # 查看当前sql_mode
  2. select @@sql_mode;
  3. # 查看全局sql_mode
  4. select @@global.sql_mode;

4.2 显示结果:

  1. mysql> select @@sql_mode;
  2. +-------------------------------------------------------------------------------------------------------------------------------------------+
  3. | @@sql_mode |
  4. +-------------------------------------------------------------------------------------------------------------------------------------------+
  5. | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
  6. +-------------------------------------------------------------------------------------------------------------------------------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select @@global.sql_mode;
  9. +-------------------------------------------------------------------------------------------------------------------------------------------+
  10. | @@global.sql_mode |
  11. +-------------------------------------------------------------------------------------------------------------------------------------------+
  12. | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
  13. +-------------------------------------------------------------------------------------------------------------------------------------------+
  14. 1 row in set (0.00 sec)
  15. mysql>

4.3 修改sql_mode(将上述查询到的sql_mode中的NO_ZERO_DATE和NO_ZERO_IN_DATE删除即可)

  1. # 修改全局
  2. set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  3. # 修改当前
  4. set @@sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

发表评论

表情:
评论列表 (有 0 条评论,274人围观)

还没有评论,来说两句吧...

相关阅读