久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL設置only

142次閱讀
沒有評論

共計 2364 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章主要講解了“MySQL 設置 only_full_group_by 報錯如何解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“MySQL 設置 only_full_group_by 報錯如何解決”吧!

開發環境連接的 mysql5.6,而測試環境是 mysql5.7。開發中有小伙伴寫了有關 group by 的 sql 語句。在開發環境中運行是正常的,而到了測試環境中就發現了異常。

原因分析:MySQL5.7 版本默認設置了 mysql sql_mode = only_full_group_by 屬性,導致報錯。

其中 ONLY_FULL_GROUP_BY 就是造成這個錯誤的罪魁禍首了,在這種嚴格模式下,對于 group by 聚合操作,若在 select 中的列沒有在 group by 中出現,那么這個 SQL 就是不合法的。因為開發寫的 sql 中,select 列不在 group by 從句中,在使用 group by 時就會報錯。

測試環境下載安裝的是最新版的 mysql5.7.x 版本,默認是開啟了 only_full_group_by 模式的。

1. 查看 sql_mode

SELECT` `@@sql_mode;

查詢出來的值為:

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

2. 去掉 ONLY_FULL_GROUP_BY,重新設置值。

SET` `@@``global``.sql_mode =`` STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3. 上面是改變了全局 sql_mode,對于新建的數據庫有效。

對于已存在的數據庫,則需要在對應的數據下執行

SET` `sql_mode =`` STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

以上方法 mysql 數據庫重啟后依然無效,下列方式重啟后依然生效

找到 MySQL 的配置文件, 在 linux 系統上 /etc/my.cnf 文件, 查詢 sql_mode 字段, 我并沒有在配置文件中找到這個關鍵字, 所以我手動添加進去:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

需要注意的一點是一定要添加在 [mysqld] 配置內, 這樣添加完后重啟 mysql 才會生效, 退出數據庫:exit, 重啟命令:

service mysqld restart
#lnmp 重啟 mysql
lnmp restart mysql

刷新頁面報錯信息消失成功解決, 再次連接上數據庫查看 sql_mode 配置 select @@sql_mode :

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

以下為 sql_mode 常用值的含義,參考:

ONLY_FULL_GROUP_BY:對于 GROUP BY 聚合操作,如果在 SELECT 中的列,沒有在 GROUP BY 中出現,那么這個 SQL 是不合法的,因為列不在 GROUP BY 從句中

NO_AUTO_VALUE_ON_ZERO:該值影響自增長列的插入。默認設置下,插入 0 或 NULL 代表生成下一個自增長值。如果用戶希望插入的值為 0,而該列又是自增長的,那么這個選項就有用了。

STRICT_TRANS_TABLES:在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制

NO_ZERO_IN_DATE:在嚴格模式下,不允許日期和月份為零

NO_ZERO_DATE:設置該值,mysql 數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:在 INSERT 或 UPDATE 過程中,如果數據被零除,則產生錯誤而非警告。如果未給出該模式,那么數據被零除時 MySQL 返回 NULL

NO_AUTO_CREATE_USER:禁止 GRANT 創建密碼為空的用戶

NO_ENGINE_SUBSTITUTION:如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設置此值時,用默認的存儲引擎替代,并拋出一個異常

PIPES_AS_CONCAT:將”||”視為字符串的連接操作符而非或運算符,這和 Oracle 數據庫是一樣的,也和字符串的拼接函數 Concat 相類似

ANSI_QUOTES:啟用 ANSI_QUOTES 后,不能用雙引號來引用字符串,因為它被解釋為識別符。

感謝各位的閱讀,以上就是“MySQL 設置 only_full_group_by 報錯如何解決”的內容了,經過本文的學習后,相信大家對 MySQL 設置 only_full_group_by 報錯如何解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2364字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 建阳市| 麻城市| 鄱阳县| 新宁县| 白城市| 图木舒克市| 乐安县| 武清区| 准格尔旗| 宕昌县| 秦皇岛市| 北票市| 和龙市| 罗平县| 扬中市| 赤水市| 晋城| 尚志市| 区。| 瑞金市| 丰顺县| 揭西县| 镇赉县| 曲阜市| 互助| 来安县| 上蔡县| 察隅县| 顺昌县| 兴宁市| 府谷县| 蒙山县| 湘乡市| 中卫市| 南和县| 岳池县| 顺平县| 长垣县| 庆元县| 巴里| 当阳市|