mysql datetime 默认设置成 '0000-00-00 00:00:00' 时失败 有更新!

  |   0 评论   |   347 浏览

    在给 mysql 的 create_time 之类设置默认值0000-00-00 00:00:00的时候,会报错,原因是不符合日期的基本格式

    主要是 sql_mode 来决定的,先查看下 sql_mode 的值,进入 mysql 命令行模式:

    select @@sql\_mode;
    

    没有修改前,值可能是这样的:

    ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    主要是 NO_ZERO_IN_DATE,NO_ZERO_DATE 导致的,如果要修改其值,网上有说直接 set global 值的,貌似是没法直接设置值的。

    sql_mode本身是在 mysql 的performance_schema/session_variables下的一个字段,直接数据库修改值貌似也是不行的。

    后来找到一个解决方案:

    mac 下没有 my.cnf 文件,默认在 mysql 的安装路径下的 mysql/support-files 下有个 my-default.cnf 配置文件,然后可以将这个文件 cp 到 mysql 的安装目录下,改名 my.cnf,mysql 默认会读取这个配置。在 windows 下是my.ini文件,然后修改一下,将 sql_mode 改为
    sql_mode=ONLYFULLGROUPBY,STRICTTRANSTABLES,ERRORFORDIVISIONBYZERO,NOAUTOCREATEUSER,NOENGINESUBSTITUTI
    主要是去掉 NO_ZERO_IN_DATE,NO_ZERO_DATE 即可,然后重启mysql生效

    查找 mysql 的安装路径:

    which mysql  // '/usr/local/bin/mysql'
    ll /usr/local/bin/mysql  // 即可找到对应的安装路径
    

    评论

    发表评论

    validate