本机上新安装了个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:Programmermysqlmysql-8.0.11-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:Programmermysqlmysql-8.0.11-winx64data # 允许最大连接数 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:WindowsSystem32 目录下找到了 cmd.exe 文件,右键“以管理员身份运行”,然后再执行停止的命令就OK了。
最后并没有解决问题,可能是我的mysql8版本过高了,上面方法应该对mysql5有效吧。。。。。。。。。。有时间研究下为啥?