這篇文章主要介紹MySQL5.7及以上版本ONLY_FULL_GROUP_BY報(bào)錯怎么辦,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
馬尾網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
近期在開發(fā)過程中,因?yàn)轫?xiàng)目開發(fā)環(huán)境連接的mysql數(shù)據(jù)庫是阿里云的數(shù)據(jù)庫,而阿里云的數(shù)據(jù)庫版本是5.6的。而測試環(huán)境的mysql是自己安裝的5.7。因此在開發(fā)過程中有小伙伴不注意寫了有關(guān)group by的sql語句。在開發(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)錯。
其中ONLY_FULL_GROUP_BY就是造成這個錯誤的罪魁禍?zhǔn)琢?對于group by聚合操作,如果在select中的列沒有在group by中出現(xiàn),那么這個SQL是不合法的,因?yàn)榱胁辉趃roup by從句中,所以設(shè)置了sql_mode=only_full_group_by的數(shù)據(jù)庫,在使用group by時(shí)就會報(bào)錯。
測試環(huán)境下載安裝的是最新版的mysql5.7.x版本,默認(rèn)是開啟了 only_full_group_by 模式的,但開啟這個模式后,原先的 group by 語句就報(bào)錯,然后又把它移除了。
一旦開啟 only_full_group_by ,感覺,group by 將變成和 distinct 一樣,只能獲取受到其影響的字段信息,無法和其他未受其影響的字段共存,這樣,group by 的功能將變得十分狹窄了
only_full_group_by 模式開啟比較好。因?yàn)樵?mysql 中有一個函數(shù): any_value(field) 允許,非分組字段的出現(xiàn)(和關(guā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字段,我并沒有在配置文件中找到這個關(guān)鍵字,所以我手動添加進(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才會生效,退出數(shù)據(jù)庫:exit,重啟命令:
service mysqld restart
刷新頁面報(bào)錯信息消失成功解決,再次連接上數(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
以上是“Mysql5.7及以上版本ONLY_FULL_GROUP_BY報(bào)錯怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:Mysql5.7及以上版本ONLY_FULL_GROUP_BY報(bào)錯怎么辦
網(wǎng)頁URL:http://aaarwkj.com/article18/pjcedp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站策劃、面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈、微信小程序、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(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)