• MySQL 数据库在 Windows 下修复 only_full_group_by 的错误


    本机上新安装了个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有效吧。。。。。。。。。。有时间研究下为啥?

  • 相关阅读:
    无U盘安装Linux openSUSE(通过硬盘安装Linux)
    【汇编语言】DEBUG的使用
    【汇编语言】新手第一步——HelloWorld & A+B
    Java开发中的23种设计模式详解(转)
    python安装PIL包的方法
    python正则表达式匹配十六进制数据
    mysql安装的坑
    pdfplumber解析PDF报错:ValueError: not enough values to unpack (expected 2, got 1)
    pdfplumber解析票据PDF文档,部分中文字体返回CID,无法解析
    CAN总线字节序
  • 原文地址:https://www.cnblogs.com/wbxk/p/10597839.html
Copyright © 2020-2023  润新知