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 本文主要內容來源於愛可生技術文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM