本機上新安裝了個MySQL數據庫,在插入數據的時候一直提示這個錯誤:
[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

這個錯誤的原因在於sql_mode的值,我們需要去掉only_full_group_by
尋找配置文件
1、Windows下MySQL的配置文件是my.ini,一般會在安裝目錄的根目錄。
2、Linux下MySQL的配置文件是my.cnf,一般會放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。
3、Linux用rpm包安裝的MySQL是不會安裝/etc/my.cnf文件的。
至於為什么沒有這個文件而MySQL卻也能正常啟動和作用,有兩個說法:
第一種說法,my.cnf只是MySQL啟動時的一個參數文件,可以沒有它,這時MySQL會用內置的默認參數啟動;
第二種說法,MySQL在啟動時自動使用/usr/share/mysql目錄下的my-medium.cnf文件,這種說法僅限於rpm包安裝的MySQL。
解決方法:只需要復制一個/usr/share/mysql目錄下的.cnf文件到/etc目錄,並改名為my.cnf即可。
修改配置文件
我只是添加了一行配置sql_mode,值是通過查詢數據庫中的值去掉only_full_group_by。
SELECT @@sql_mode;

文件內容:
[mysqld] # 設置3306端口 port=3306 # 設置mysql的安裝目錄 basedir=D:\Programmer\mysql\mysql-8.0.11-winx64 # 設置mysql數據庫的數據的存放目錄 datadir=D:\Programmer\mysql\mysql-8.0.11-winx64\data # 允許最大連接數 max_connections=200 # 允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統 max_connect_errors=10 # 服務端使用的字符集默認為UTF8 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB # 默認使用“mysql_native_password”插件認證 default_authentication_plugin=mysql_native_password [mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 [client] # 設置mysql客戶端連接服務端時默認使用的端口 port=3306 default-character-set=utf8 # 設置sql_mode,去掉了ONLY_FULL_GROUP_BY sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
重啟數據庫
在手動修改了Mysql的配置文件之后,我們要重啟Mysql服務才能使之生效,這里提供幾種重啟方法:
1、windows下重新啟動mysql5的方法:
在安裝mysql時系統會添加服務,可以通過管理工具里面的 <服務> 一項來停止和啟動mysql。這樣修改的my.ini就會生效了。
2、也可以用命令行模式,在運行里輸入:
停止:
net stop mysql
(其中mysql為你安裝的mysql服務名稱)
啟動:
net start mysql
3、如果你沒安裝系統服務,也可在命令行模式定位到mysql下的bin目錄里,輸入:
關閉:
mysqladmin shutdown
啟動:
mysqladmin start
不過我在停止服務的時候遇到了問題,提示訪問被拒絕。

這是權限不足,必須使用管理員身份啟動命令行窗口。
在 C:\Windows\System32 目錄下找到了 cmd.exe 文件,右鍵“以管理員身份運行”,然后再執行停止的命令就OK了。

最后並沒有解決問題,可能是我的mysql8版本過高了,上面方法應該對mysql5有效吧。。。。。。。。。。有時間研究下為啥?
