• 升级 mysql5.6 配置文件my.cnf sql_mode 解析与设置问题


    sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 

    1.sql_mode值的含义

    ONLY_FULL_GROUP_BY

    对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中

    STRICT_TRANS_TABLES

    在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制

    NO_ZERO_IN_DATE

    在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。

    NO_ZERO_DATE

    在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告

    ERROR_FOR_DIVISION_BY_ZERO

    在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。

    NO_AUTO_CREATE_USER

    防止GRANT自动创建新用户,除非还指定了密码。

    NO_ENGINE_SUBSTITUTION

    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。

    mysql5.0以上版本支持三种sql_mode模式:

    ANSI模式

    宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。

    TRADITIONAL模式

    严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。

    STRICT_TRANS_TABLES模式

    严格模式,进行数据的严格校验,错误数据不能插入,报error错误。

    我们可以通过以下方式查看当前数据库使用的sql_mode:
    
    mysql> select @@sql_mode;
    
    或者通过查看系统变量方式:
    mysql> show variables like 'sql_mode%';

    2.今天升级mysql5.6后程序警告

    原来mysql 5.6版本后将mysql数据库的sql_mode默认设置了ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES等值,
    所以导致之前sql中有group by等函数的sql不能正常执行, 如需解决此问题只需在本地mysql命令行中使用set @@sql_mode
    ='';即可解决此问题, 但是此方法并不是根本解决方案,这样更改数据库模式都是session级别的,一次性,当你的mysql再次重启后又会出现此问题, 所以最根本解决方案是在 /etc/mysql5.*/目录下数据库配置文件my.cnf(Windows是my.ini)中的 [mysqld] 下添加 sql_mode='' 然后重启mysql即可,如下图:

    推荐在my.cnf添加如下配置
    [mysqld]
    sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
    ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'
  • 相关阅读:
    JavaScript——面向对象的程序设计——创建对象与继承
    JavaScript 引用类型
    JavaScript 变量、作用域和内存问题
    JavaScript基本概念——操作符
    JavaScript基本概念
    在HTML中使用JavaScript
    JavaScript简介
    记录前端遇到的坑
    第八次作业
    电脑上下载b站视频到本地
  • 原文地址:https://www.cnblogs.com/hiit/p/8609965.html
Copyright © 2020-2023  润新知