[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

配置文件的問題,這裏有個好的解決辦法
https://www.cnblogs.com/skymyyang/p/7551646.html
MySQL[Err]1055
上次MySQL5.7.19主從建立完成之後,所有的測試都是在MySQL命令行下進行的,最近用Navicat Premium進行MySQL的連接,然後在插入數據的時候MySQL突然報錯了,可是我的數據插入成功了,感覺很奇怪!!
報錯內容如下:
[SQL]INSERT INTO biao(ziduan2) VALUES(8888888);
受影響的行: 1
時間: 0.012s

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
在知乎上找到了一個答案,貌似可以解決問題
在my.cnf 裏面設置sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’在sql_mode 中去掉only_full_group_by 解決問題!

PS:可是依然不知道sql_mode是什麼?
這裏我們先看一下MySQL5.6和MySQL5.7默認的sql模式

MySQL 5.6 Default SQL_MODE;

mysql> select @@sql_mode;
±-------------------------------------------+
| @@sql_mode |
±-------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
±-------------------------------------------+
1 row in set (0.00 sec)

MySQL 5.7 Default SQL_MODE;

mysql> select @@sql_mode;
±------------------------------------------------------------------------------------------------------------------------------------------+
| @@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 |
±------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql的sql_mode合理設置
mysql的sql_mode合理設置
sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入。在生產環境必須將這個值設置爲嚴格模式,所以開發、測試環境的數據庫也必須要設置,這樣在開發測試階段就可以發現問題

sql_mode常用值如下:
ONLY_FULL_GROUP_BY
對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因爲列不在GROUP BY從句中。
在嚴格模式下,不要讓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後,不能用雙引號來引用字符串,因爲它被解釋爲識別符

ORACLE的sql_mode設置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

如果使用mysql,爲了繼續保留大家使用oracle的習慣,可以對mysql的sql_mode設置如下:
在my.cnf添加如下配置
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES’
PS:參考自:http://www.cnblogs.com/grimm/p/5752259.html,http://www.ywnds.com/?p=8865

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