今天同事從新安裝的環境MySQL登錄的時候就提示報錯信息以下:mysql
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and containsnonaggregated column 'navibars.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
簡單解釋一下就是:我要查的navibars.name 列是非聚合的,這違背了sql的only_full_group_by 模式。這裏就不貼數據表結構和sql語句了,只是簡單解釋一下錯誤緣由。sql
當mysql分組後,出現有歧義的列時,好比下表:性能
code | name | status |
---|---|---|
a | admin | N |
b | guest | N |
select name from 表 group by status;
在5.5版本中,會默認去第一條的name 即 admin,在5.7中就會報錯,由於有這個分組裏有兩個不一樣的name,sql並不知道是哪一個而你也沒有聲明,下面是MySQL高性能第三版關於這方面的闡述:優化
在分組查詢的SELECT中直接使用非分組列(上表以status分組,可是用的是非分組列name)一般不是什麼好主意,由於這樣的結果一般是不定的,當索引改變,或者優化器選擇不一樣的優化策略時均可能致使結果不同。ui
解決思路:this
1.修改代碼code
2.MySQL版本回退索引
3.修改SQL配置文件
http://www.tuicool.com/articles/AF73amzget