在navicat中执行create table语句时报错:
[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;
SELECT @@SESSION.sql_mode;
结果:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
解决方案一:(未解决问题)
重新设置sql_mode
set SESSION sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ';
执行时报错
[Err] 1231 - Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字,删掉sql语句中的这个关键字即可
改为:set SESSION sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ';
执行成功。
但是重写创建表,仍旧报1055的错误。
重启mysql服务
以管理员的身份打开控制台窗口,输入 net stop mysql 停止mysql服务,再输入 net start mysql 启动服务。
发现之前修改的sql_mode值又变了回来,说明只是临时修改参数,不能把更改写到配置文件中,重启后恢复修改前的值。
解决方案二:
Windows操作系统中mysql配置文件是my.ini。
查看mysql安装目录:select @@basedir
在安装目录下找到my.ini文件,添加参数:sql_mode=sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
在修改my.ini文件时出现个小插曲,初始my.ini文件内容如下,不管在哪个位置添加sql_mode,都不成功。
[mysqld]
character-set-server=utf8mb4
bind-address=0.0.0.0
port=3306
default-storage-engine=INNODB
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
后来改为下面这种形式,就成功了。
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
bind-address=0.0.0.0
port=3306
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES