MySql5.7 以上版本在常會報關(guān)于 only_full_group_by 的錯誤,sql 中 select 后面的字段必須出現(xiàn)在group by 后面,或者被聚合函數(shù)包裹,不然會拋錯誤。
查看
進入mysql 查看mysql版本:select version();
運行SELECT @@GLOBAL.sql_mode;和SELECT @@SESSION.sql_mode;查看sql_model參數(shù),可以看到參數(shù)中有ONLY_FULL_GROUP_BY,
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
這種方式只是臨時去除:
set @@GLOBAL.sql_mode='';
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';12
修改配置文件去除ONLY_FULL_GROUP_BY
這種方式是我實踐的方式,我詳細說一下:
- 打開配置文件
mysql.cnf
sudo gedit /etc/mysql/mysql.cnf
- 在 [mysqld] 中添加代碼
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
網(wǎng)上有很多資料寫到這段代碼在[mysql]中也同時添加,另外有些寫著添加內(nèi)容為 “set sql_mode XXXX”經(jīng)過我在自己機器上驗證,發(fā)現(xiàn)都是不行的,只能在[mysqld]添加,否則會造成mysql無法連接
驗證是否生效
重啟mysql
sudo service mysql restart1