Mac上mysql 5.7 修改sql_mode ONLY_FULL_GROUP_BY

ONLY_FULL_GROUP_BY是MySQL提供的一個(gè)sql_mode,通過這個(gè)sql_mode來提供SQL語句GROUP BY合法性的檢查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY語義時(shí)。一條select語句,MySQL允許target list中輸出的表達(dá)式是除聚集函數(shù)或group by column以外的表達(dá)式,這個(gè)表達(dá)式的值可能在經(jīng)過group by操作后變成undefined。

一般方式

1、查看sql_mode

SELECT @@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

2、去掉ONLY_FULL_GROUP_BY,重新設(shè)置值。

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';

3、上面是改變了全局sql_mode,對(duì)于新建的數(shù)據(jù)庫有效。對(duì)于已存在的數(shù)據(jù)庫,則需要在對(duì)應(yīng)的數(shù)據(jù)下執(zhí)行:

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';

廢話半天,但是其實(shí)同事和我本地這樣設(shè)置都沒有生效。

大家都明白,工具里面修改一般是臨時(shí)的,只有修改配置文件才是永久的,但是比如在同事電腦上參考好幾種網(wǎng)絡(luò)上的說法修改了/etc/my.cnf文件,也還是沒有奏效。

windows 在安裝目錄下的my.ini 文件
Mac 或者Linux 在/ etc/my.cnf 下面應(yīng)該是
總之就是在個(gè)人mysql配置文件中修改。

另一個(gè)方式

最后沒辦法了,下面的命令卻不小心達(dá)到了目的,特此記錄一下。

SET @@sql_mode=REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容