• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Navicat运行SQL文件时触发“1067 - Invalid default value for ‘time‘”错误解决方法

    发布者: Error | 发布时间: 2025-6-20 09:02| 查看数: 61| 评论数: 0|帖子模式

    前言

    在使用Navicat进行SQL文件操作时,对于MySQL 5.7及以上版本,可能会触发“1067 - Invalid default value for ‘time’”错误。这通常是由于SQL模式的设置与默认值的冲突导致的。本文将详细说明此问题的成因,并通过实例分析提供完整的解决方案,包括相关指令的含义和作用。

    1 错误触发原因

    当在MySQL中创建表或执行包含日期和时间值的SQL文件时,如果试图设置全零值作为默认值,就可能触发“1067 - Invalid default value for ‘time’”错误。这种问题通常与MySQL的严格模式(STRICT mode)有关。


    1.1 严格模式的启用和影响

    从MySQL 5.7开始,默认启用了严格模式,这种模式对日期和时间值有以下限制:

    • NO_ZERO_IN_DATE:禁止有效日期中包含全零值,例如“0000-00-00”。
    • NO_ZERO_DATE:禁止日期和时间的默认值为全零值,例如“0000-00-00 00:00:00”。
    这些限制的目的是确保数据的完整性,但同时也可能导致与早期SQL代码的不兼容。

    1.2 Navicat执行文件时的问题

    在使用Navicat连接MySQL并运行SQL文件时,如果SQL代码中包含全零值作为默认值,例如“0000-00-00 00:00:00”,就会触发“1067”错误。这主要是因为SQL文件的默认值设置与严格模式冲突。

    2 解决方法

    要解决此错误,可以通过调整全局或当前连接的SQL模式来避免冲突。

    2.1 全局SQL模式调整

    如果需要在整个数据库实例范围内解决此问题,可以使用以下指令:
    1. SET @@global.sql_mode = (SELECT REPLACE(@@global.sql_mode, 'NO_ZERO_IN_DATE,NO_ZERO_DATE', ''));
    复制代码

    • 指令含义

        1. @@global.sql_mode
        复制代码
        :表示MySQL全局SQL模式的配置。
        1. REPLACE
        复制代码
        :将全局SQL模式中的指定选项替换为空,保留其他模式配置。

    • 作用:通过移除“NO_ZERO_IN_DATE”和“NO_ZERO_DATE”,允许SQL文件中的全零默认值。
    操作完成后,可以使用以下指令检查SQL模式是否已生效:
    1. SELECT @@global.sql_mode;
    复制代码
    2.2 当前连接SQL模式调整

    如果只需要调整当前会话的SQL模式,而不影响全局配置,可以使用以下指令:
    1. SET @@session.sql_mode = (SELECT REPLACE(@@session.sql_mode, 'NO_ZERO_IN_DATE,NO_ZERO_DATE', ''));
    复制代码
    该操作仅对当前连接有效,断开连接后需要重新设置。

    3 实例分析


    3.1 原始SQL代码

    以下SQL代码在MySQL严格模式下会触发“1067”错误:
    1. CREATE TABLE test_table (
    2.     id INT NOT NULL AUTO_INCREMENT,
    3.     time TIMESTAMP DEFAULT '0000-00-00 00:00:00',
    4.     PRIMARY KEY (id)
    5. );
    复制代码
    3.2 解决方案

    通过调整SQL模式或修改表定义中的默认值可以解决此问题。例如:
    1. CREATE TABLE test_table (
    2.     id INT NOT NULL AUTO_INCREMENT,
    3.     time TIMESTAMP NULL DEFAULT NULL,
    4.     PRIMARY KEY (id)
    5. );
    复制代码
    这种方式可以避免无效的日期和时间默认值,同时仍然保持数据的完整性和有效性。

    4 注意事项


    • 全局模式调整的影响:修改全局SQL模式会影响所有连接到数据库的会话,因此在生产环境中需谨慎操作。
    • 建议:尽量使用
      1. NULL
      复制代码
      或其他有效的默认值代替全零值,以减少潜在的兼容性问题。

    结语

    通过调整SQL模式,我们可以有效解决在Navicat运行SQL文件时触发的“1067 - Invalid default value for ‘time’”错误。这种方式不仅简单易行,还能保证SQL文件的兼容性和数据的完整性。在实际操作中,选择全局调整或会话调整需要根据具体需求决定,以确保对系统其他功能的影响最小。
    以上就是Navicat运行SQL文件时触发“1067 - Invalid default value for ‘time‘”错误解决方法的详细内容,更多关于Navicat运行SQL触发1067 Invalid default value的资料请关注脚本之家其它相关文章!

    来源:https://www.jb51.net/database/332855eyo.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表