MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決

這篇文章主要講解了“MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決”吧!

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有隆安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

開發(fā)環(huán)境連接的 mysql5.6,而測試環(huán)境是 mysql5.7。開發(fā)中有小伙伴寫了有關(guān) group bysql 語句。在開發(fā)環(huán)境中運(yùn)行是正常的,而到了測試環(huán)境中就發(fā)現(xiàn)了異常。

原因分析:MySQL5.7 版本默認(rèn)設(shè)置了 mysql sql_mode = only_full_group_by 屬性,導(dǎo)致報(bào)錯(cuò)。

其中 ONLY_FULL_GROUP_BY 就是造成這個(gè)錯(cuò)誤的罪魁禍?zhǔn)琢?,在這種嚴(yán)格模式下,對于 group by 聚合操作,若在 select 中的列沒有在group by 中出現(xiàn),那么這個(gè) SQL 就是不合法的。因?yàn)殚_發(fā)寫的 sql 中,select 列不在 group by 從句中,在使用 group by 時(shí)就會(huì)報(bào)錯(cuò)。

測試環(huán)境下載安裝的是最新版的 mysql5.7.x 版本,默認(rèn)是開啟了 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,重新設(shè)置值。

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,對于新建的數(shù)據(jù)庫有效。

對于已存在的數(shù)據(jù)庫,則需要在對應(yīng)的數(shù)據(jù)下執(zhí)行

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數(shù)據(jù)庫重啟后依然無效,下列方式重啟后依然生效

找到 MySQL 的配置文件,在 linux 系統(tǒng)上 /etc/my.cnf 文件,查詢 sql_mode 字段,我并沒有在配置文件中找到這個(gè)關(guān)鍵字,所以我手動(dòng)添加進(jìn)去:

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

需要注意的一點(diǎn)是一定要添加在 [mysqld] 配置內(nèi),這樣添加完后重啟mysql 才會(huì)生效,退出數(shù)據(jù)庫:exit,重啟命令:

service mysqld restart

#lnmp重啟mysql
lnmp restart mysql

刷新頁面報(bào)錯(cuò)信息消失成功解決,再次連接上數(shù)據(jù)庫查看 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中出現(xiàn),那么這個(gè)SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中

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

STRICT_TRANS_TABLES:在該模式下,如果一個(gè)值不能插入到一個(gè)事務(wù)表中,則中斷當(dāng)前的操作,對非事務(wù)表不做限制

NO_ZERO_IN_DATE:在嚴(yán)格模式下,不允許日期和月份為零

NO_ZERO_DATE:設(shè)置該值,mysql數(shù)據(jù)庫不允許插入零日期,插入零日期會(huì)拋出錯(cuò)誤而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE過程中,如果數(shù)據(jù)被零除,則產(chǎn)生錯(cuò)誤而非警告。如果未給出該模式,那么數(shù)據(jù)被零除時(shí)MySQL返回NULL

NO_AUTO_CREATE_USER:禁止GRANT創(chuàng)建密碼為空的用戶

NO_ENGINE_SUBSTITUTION:如果需要的存儲(chǔ)引擎被禁用或未編譯,那么拋出錯(cuò)誤。不設(shè)置此值時(shí),用默認(rèn)的存儲(chǔ)引擎替代,并拋出一個(gè)異常

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

ANSI_QUOTES:啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因?yàn)樗唤忉尀樽R別符。

感謝各位的閱讀,以上就是“MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

分享題目:MySQL設(shè)置only_full_group_by報(bào)錯(cuò)如何解決
標(biāo)題來源:http://muchs.cn/article40/gheseo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)建站公司、定制網(wǎng)站、標(biāo)簽優(yōu)化網(wǎng)頁設(shè)計(jì)公司、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)