• mysql 5.7~默认sql_mode解读


    当5.6升级到5.7时,首先要注意的就是sql_mode对业务的影响 大概可以分为几类
    1 共同支持,如果你的5.6和5.7sql_mode配置支持的交集一样,那么不用考虑
    2 5.7细说
      1 ONLY_FULL_GROUP_BY 该选项的含义表示:对于使用 GROUP BY 进行查询的SQL,不允许 SELECT 部分出现 GROUP BY 中未出现的字段,也就是 SELECT 查询的字段必须是 GROUP BY中出现的或者使用聚合函数的或者是具有唯一属性的。
        eg select a b c from d group a
        解决方案 1 b c添加唯一索引,保住唯一性 2 sql_mode去掉此限制  3改写sql
      2 NO_ZERO_DATE & NO_ZERO_IN_DATE & time_zone  MySQL中插入的时间字段值,不允许日期为零
        eg Y_DATETIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
      3 NO_ENGINE_SUBSTITUTION 在使用CREATE TABLE或者ALTER TABLE语法执行存储引擎的时候,如果设定的存储引擎被禁用或者未编译,会产生错误。
      4 STRICT_TRANS_TABLES  该选项针对事务性存储引擎生效,对于非事务性存储引擎无效,该选项表示开启strict sql模式。在strict sql模式下,在INSERT或者UPDATE语句中,插入或者更新了某个不符合规定的字段值,则会直接报错中断操作

      5    ERROR_FOR_DIVISION_BY_ZERO
            INSERT或者UPDATE语句中,如果数据被0除,则出现警告(非strict sql模式下)或者错误(strict sql模式下)。

           当该选项关闭时,数字被0除,得到NULL且不会产生警告

           当该选项开启且处于非strict sql模式下,数字被0除,得到NULL但是会产生警告

           当该选项开启且处于strict sql模式下,数字被0除,产生错误且中断操作

     6   NO_AUTO_CREATE_USER  之前版本中使用GRANT语法,如果用户不存在则会自动创建用户,该选项限制该功能


    3 总结
      1 当升级过程中,配置相同sql_mode的配置尤为重要,如果支持非常好,如果有问题,则进行改造
      2 线上常用的都是3,4两种.5.6-5.7通用
    4 本文主要内容来源于爱可生技术文章

  • 相关阅读:
    Web scraping tutorials with FMiner
    javascript
    Installing perl and writing your first perl program in Ubuntu
    c++
    sudo apt-get install libfcgi libfcgi-dev
    微信JSApi支付~订单号和微信交易号
    微信JSApi支付~坑和如何填坑
    WebApi系列~安全校验中的防篡改和防复用
    EF架构~CodeFirst自关联表的插入
    实时监控Cat之旅~对请求是否正常结束做监控(分布式的消息树)
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10776061.html
Copyright © 2020-2023  润新知