zoukankan      html  css  js  c++  java
  • MySQL报错1055

    1、问题复现:

      今天在进行数据迁移时,使用Navicat连接数据库进行连接时,由于 SQL语句中使用了 group by分组函数,结果报了如下错误:

    2、产生原因

      产生原因说是,在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。

    3、问题解决

      既然是 MySQL配置问题,找到了原因,就好对症下药进行解决了。

    方法一:

      在Navicat中,输入下列SQL语句进行查询:

    SELECT @@GLOBAL.sql_mode;

      查询结果如下:

    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

      通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 ONLY_FULL_GROUP_BY,重新设置值。

      解决方法如下:

    set @@global.sql_mode 
    ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

      执行完上面的SQL语句之后,再次执行报错的SQL语句,发现可以正常运行了。

    方法二:

      除了上面的手动设置sql_mode值之外,还可以在 MySQL 的配置文件中进行设置。

      1、对于 Linux系统,进到 /etc/my.cnf 文件下,查询sql_mode字段,由于在配置文件中未找到这个关键字,所以我在

        [mysqld] 配置中手动添加进去:
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

       添加完之后,保存退出,重启 MySQL 即可生效。

      2、对于windows系统,进行 MySQL安装目录下,找到 my.ini 文件,同样在配置文件中搜索sql_mode关键字,

            若未搜索到,则需要在  [mysqld] 配置中手动添加进去:

    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

       添加完毕之后,保存退出,然后重启一下 MySQL 服务即可生效。

    参考链接:

        https://www.cnblogs.com/52lnamp/p/9294330.html

        https://www.cnblogs.com/chancy/p/10026097.html

  • 相关阅读:
    C# .NET Socket封装
    Web页面实现后台数据处理进度与剩余时间的显示
    彻底解决“从客户端中检测到有潜在危险的Request.Form值”
    自己封装的Windows7 64位旗舰版,微软官网上下载的Windows7原版镜像制作,绝对纯净版
    Oracle导入导出命令
    Oracle创建用户、表空间并设置权限
    Web Service 和WCF的比较
    Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
    图表控件MsChart使用demo
    Excel中的宏--VBA的简单例子
  • 原文地址:https://www.cnblogs.com/cndarren/p/13395374.html
Copyright © 2011-2022 走看看