mysql8使用group報錯(Expression #1 of SELECT list is not in GROUP BY clause )

首先網上查了一下,是有解決方案的,主要原因是

MySQL 5.7.5和up實現了對功能依賴的檢測。如果啓用了only_full_group_by SQL模式(在默認情況下是這樣),那麼MySQL就會拒絕選擇列表、條件或順序列表引用的查詢,這些查詢將引用組中未命名的非聚合列,而不是在功能上依賴於它們。

簡單說就是要修改MySQL的SQL模式配置,好的
然後修改命令是:

set session sql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

//修改globalsql
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'

執行完這兩句就可以,然而只是無腦執行操作了,沒發現提示了error,執行多次無效發現原來是報了error

error:variable ‘sql_mode’ can’t be set to the value of ‘NO_AUTO_CREATE_USER’

字面意思大概就是sql_mode不能配置NO_AUTO_CREATE_USER,好嘛,再查,
原因找到了:

8.0以上已經取消了NO_AUTO_CREATE_USER這個關鍵字

那好吧,那就:

set session sql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

//修改globalsql
set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

刪掉set的NO_AUTO_CREATE_USER執行就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章