sql_mode=only_full_group_by

今天同事從新安裝的環境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

相關文章
相關標籤/搜索