当前位置:Gxlcms > 数据库问题 > MySQL的sql_mode模式说明及设置

MySQL的sql_mode模式说明及设置

时间:2021-07-01 10:21:17 帮助过:185人阅读

四、改为严格模式后可能会存在的问题

若设置模式中包含了NO_ZERO_DATE,那么MySQL数据库不允许插入零日期,插入零日期会抛出错误而不是警告。例如表中含字段TIMESTAMP列(如果未声明为NULL或显示DEFAULT子句)将自动分配DEFAULT ‘0000-00-00 00:00:00‘(零时间戳),也或者是本测试的表day列默认允许插入零日期 ‘0000-00-00‘ COMMENT ‘日期‘;这些显然是不满足sql_mode中的NO_ZERO_DATE而报错。

五、模式设置和修改(以解决上述问题为例)

  1. 方式一:先执行select @@sql_mode,复制查询出来的值并将其中的NO_ZERO_IN_DATE,NO_ZERO_DATE删除,然后执行set sql_mode = ‘修改后的值‘或者set session sql_mode=‘修改后的值‘;,例如:set session sql_mode=‘STRICT_TRANS_TABLES‘;改为严格模式

    此方法只在当前会话中生效,关闭当前会话就不生效了。

  2. 方式二:先执行select @@global.sql_mode,复制查询出来的值并将其中的NO_ZERO_IN_DATE,NO_ZERO_DATE删除,然后执行set global sql_mode = ‘修改后的值‘。

    此方法在当前服务中生效,重新MySQL服务后失效

  3. 方法三:在mysql的安装目录下,或my.cnf文件(windows系统是my.ini文件),新增 sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,

    添加my.cnf如下:

    [mysqld]    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
    然后重启mysql。
     此方法永久生效.当然生产环境上是禁止重启MySQL服务的,所以采用方式二加方式三来解决线上的问题,那么即便是有一天真的重启了MySQL服务,也会永久生效了

MySQL的sql_mode模式说明及设置

标签:禁用   windows系统   comment   error   分配   key   启用   oracle数据库   注意   

人气教程排行