91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中ERROR 1055(42000)報錯怎么解決

發布時間:2022-01-14 15:32:38 來源:億速云 閱讀:384 作者:iii 欄目:大數據

本篇內容主要講解“mysql中ERROR 1055(42000)報錯怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“mysql中ERROR 1055(42000)報錯怎么解決”吧!

報錯:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'work_ad.api_community_pic.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

字面意思理解是sql_model=only_full_group_by限制了,導致在以往MYSQL版本中能正常查詢的SQL,在5.7不能用了

文檔指出:ONLY_FULL_GROUP_BY的設定,將不允許查詢字段包括非聚集列

查詢mysql服務器版本:

select @@version顯示:5.7.10

#查看sql_mode的語法

select @@GLOBAL.sql_mode;select @@SESSION.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

only_full_group_by:使用這個就是使用和oracle一樣的group 規則, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其實這個配置目前個人感覺和distinct差不多的,所以去掉就好

方法一:

查詢mysql 1055錯誤碼發現問題為在mysql的配置中如果設置了sql_mode包含ONLY_FULL_GROUP_BY值得話,在進行查詢時需要將select的字段都包含在group by 中。

即 select x,y from xxx group by x,y

否則就會報錯

mysql中ERROR 1055(42000)報錯怎么解決

mysql中ERROR 1055(42000)報錯怎么解決

但是查看自己的配置my.cnf發現在sql_mode中并沒有ONLY_FULL_GROUP_BY這個值

然后去查看Laravel的配置文件,config/database.php,查找mysql的配置,

'mysql' => ['driver' => 'mysql','host' => env('DB_HOST', 'localhost'),'port' => env('DB_PORT', '3306'),'database' => env('DB_DATABASE', 'forge'),'username' => env('DB_USERNAME', 'forge'),'password' => env('DB_PASSWORD', ''),'charset' => 'utf8','collation' => 'utf8_unicode_ci','prefix' => env('DB_PREFIX',''),'strict' => true,'engine' => null,],

發現有個strict項,默認為true,上網也沒有查找到相關解釋,根據字面意思猜測可能為是否開啟嚴格模式,將其修改為false,再次測試發現問題解決,可以輸出正確結果

方法二:

#修改sql_mode的語法

通過修改配置文件my.cnf來解決這個問題的。

1. 關閉正在運行的mysql2. 修改/etc/my.cnf,將sql_mode=中的only_full_group_by給刪掉3. 重啟mysql,再執行出錯的sql發現能成功執行了
ONLY_FULL_GROUP_BY:對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUPBY中出現,那么這個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后,不能用雙引號來引用字符串,因為它被解釋為識別符

升級MYSQL5.7是為了更好的性能,據我猜測,MYSQL5.7對sql_mode的限制,也是為了更好的查詢性能。所以如果在開發階段,如果要使用mysql5.7版本建議大家閱讀一下5.7的文檔,然后將自己的sql寫的更嚴謹,盡量少用select * ,只查出自己想要的數據列即可。

由于 我的程序邏輯上只要不同的ip,和最后登錄時間,所以 我的SQL改成以下:

SELECT ip,max(last_login)  last_login FROM `sdb_login_log` group by ip;

到此,相信大家對“mysql中ERROR 1055(42000)報錯怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张北县| 梁山县| 洛扎县| 嘉荫县| 玉山县| 辽中县| 信宜市| 闵行区| 内黄县| 南投县| 海伦市| 通山县| 特克斯县| 双鸭山市| 平昌县| 英德市| 资源县| 修武县| 沂源县| 法库县| 新宾| 仁怀市| 易门县| 荥经县| 涪陵区| 古丈县| 绍兴县| 宣武区| 江油市| 黎城县| 慈利县| 唐山市| 西平县| 镇坪县| 滦平县| 泰州市| 甘泉县| 迁安市| 林西县| 乌海市| 新民市|