mysql8中如何設(shè)置sql-mode
mysql8報(bào)錯(cuò),
在mysql配置文件下設(shè)置
sql_mode=‘NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'在mysqlld下添加sql-mode
MySQL 5.7.5及以上功能依賴檢測(cè)功能。
如果啟用了ONLY_FULL_GROUP_BY
SQL模式(默認(rèn)情況下),MySQL將拒絕選擇列表,HAVING條件或ORDER BY列表的查詢引用在GROUP BY子句中既未命名的非集合列,也不在功能上依賴于它們。
解決方法一(不推薦):sql設(shè)置1、navcat中新建查詢:
select @@global.sql_mode結(jié)果:
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,問(wèn)題就出在這上
2、修改sql_mode
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';注意:“8.0.x的版本不支持NO_AUTO_CREATE_USER,去掉即可”
這樣的方式只能解決單表,且如果Mysql服務(wù)重啟(即服務(wù)器重啟)則會(huì)被mysql的默認(rèn)ini配置覆蓋,因此不推薦。
解決方法二:修改Mysql的默認(rèn)配置文件my.ini(推薦)以下為本人的配置:
[mysqld]# 設(shè)置3307端口(原先的mysql5已經(jīng)占用3306)port=3307# 設(shè)置mysql的安裝目錄(你自己的目錄)basedir='D:\\Environment\\mysql-8.0.30-winx64'# 設(shè)置mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)的存放目錄datadir='D:\\Environment\\mysql-8.0.30-winx64\\data'# 允許最大連接數(shù)max_connections=200# 允許連接失敗的次數(shù)。max_connect_errors=10# 服務(wù)端使用的字符集默認(rèn)為UTF8character-set-server=utf8# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎default-storage-engine=INNODB# 默認(rèn)使用“mysql_native_password”插件認(rèn)證#mysql_native_passworddefault_authentication_plugin=mysql_native_password#關(guān)閉ONLY_FULL_GROUP_BYsql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'[mysql]# 設(shè)置mysql客戶端默認(rèn)字符集default-character-set=utf8[client]# 設(shè)置mysql客戶端連接服務(wù)端時(shí)默認(rèn)使用的端口port=3307default-character-set=utf8配置中標(biāo)紅部分為解決問(wèn)題的部分,其中注意配置需要有單引號(hào)包裹,如果你是mysql5.x,可以加上NO_AUTO_CREATE_USER;如果你是mysql8.x,則不需加上,若你加上,則會(huì)發(fā)生服務(wù)無(wú)法啟動(dòng)的情況。
總結(jié)以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
