返回顶部
首页 > 资讯 > 数据库 >MySQL中sql_mode修改不生效怎么办
  • 168
分享到

MySQL中sql_mode修改不生效怎么办

2023-06-14 23:06:53 168人浏览 八月长安
摘要

小编给大家分享一下MySQL中sql_mode修改不生效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景模拟基于业务敏感性的考虑,下面涉及的表、存储过程等

小编给大家分享一下MySQLsql_mode修改不生效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

场景模拟

基于业务敏感性的考虑,下面涉及的表、存储过程等均非真实数据,但并不影响排查过程。

(1)客户侧开发童鞋创建了一个存储过程,该存储过程没有严格遵守group by标准语法

session 1:Mysql> delimiter //mysql> create procedure test_for_group_by()    -> begin    -> select k,pad,count(*) from test.test group by k;    -> end //Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;

(2)客户侧开发童鞋调用该存储过程,报错ERROR 1140;因为当时存储过程比较复杂,改造起来比较麻烦,所以客户侧选择修改sql_mode

session 1:mysql> call test_for_group_by();ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'test.test.k'; this is incompatible with sql_mode=only_full_group_by

(3)客户侧修改完sql_mode,再次执行,发现仍然报错ERROR 1140

session 2:mysql> 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';Query OK, 0 rows affected (0.00 sec)session 1:mysql> call test_for_group_by();ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'test.test.k'; this is incompatible with sql_mode=only_full_group_by

(4)此时想到,修改系统变量,只对新建连接有效,对已有连接不起作用;于是,让客户侧重新建立连接,确认系统变量已生效,再次调用存储过程,但仍然报错ERROR 1140,重复尝试几次都是这个结果

session 3:mysql> show variables like 'sql_mode';+---------------+------------------------------------------------------------------------------------------------------------------------+| Variable_name | Value                                                                                                                  |+---------------+------------------------------------------------------------------------------------------------------------------------+| sql_mode      | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |+---------------+------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)mysql> call test_for_group_by();ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'test.test.k'; this is incompatible with sql_mode=only_full_group_by

(5)进一步排查,让客户侧在该会话,执行非标准的group by语句,发现可以正常执行

session 3:mysql> select user,host,count(*) From mysql.user group by user;+---------------+-----------+----------+| user          | host      | count(*) |+---------------+-----------+----------+| mysql.session | localhost |        1 || mysql.sys     | localhost |        1 || root          | localhost |        1 || rpl_user      | %         |        1 || test          | %         |        1 |+---------------+-----------+----------+5 rows in set (0.00 sec)

(6)继续排查发现,该存储过程的sql_mode,还是包括ONLY_FULL_GROUP_BY,因此执行报错

session 2:mysql> select routine_catalog,routine_schema,routine_name,routine_type,created,last_altered,sql_mode from routines where routine_name='test_for_group_by';+-----------------+----------------+-------------------+--------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------+| routine_catalog | routine_schema | routine_name      | routine_type | created             | last_altered        | sql_mode                                                                                                                                  |+-----------------+----------------+-------------------+--------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------+| def             | test           | test_for_group_by | PROCEDURE    | 2020-12-24 12:12:10 | 2020-12-24 12:12:10 | 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 |+-----------------+----------------+-------------------+--------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

(7)这里我们也可以知道,系统变量修改只对新建对象有效,对已有对象不生效;解决办法很简单,重建该存储过程即可

session 3:mysql> drop procedure test_for_group_by;Query OK, 0 rows affected (0.01 sec)mysql> delimiter //mysql> create procedure test_for_group_by()    -> begin    -> select k,pad,count(*) from test.test group by k;    -> end //Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;mysql> call test_for_group_by();+--------+-------------------------------------------------------------+----------+| k      | pad                                                         | count(*) |+--------+-------------------------------------------------------------+----------+| 393975 | 35227182905-15234265621-59793845249-15413569710-23749555118 |        1 || 495688 | 09512147864-77936258834-40901700703-13541171421-15205431759 |        1 || 497896 | 13152283289-69561545685-52868757241-04245213425-69280254356 |        1 || 498573 | 43131080328-59298106536-35954612339-97546855884-75769514803 |        1 || 500775 | 27590239742-20204899609-34345212327-79811525340-24267764271 |        1 || 501885 | 63188288836-92351140030-06390587585-66802097351-49282961843 |        1 || 503330 | 01495266405-82925129145-92643983850-90243995398-18709399387 |        1 || 503666 | 40929980986-33813039690-13155419391-97985458477-39771362212 |        1 || 504353 | 00505722282-72931248925-57037623248-81117963809-88658076981 |        1 || 514246 | 21979564480-87492594656-60524686334-78820761788-57684966682 |        1 |+--------+-------------------------------------------------------------+----------+10 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

通过这个案例,我们可以知道,修改sql_mode系统变量,只对新建连接和新建对象(主要包括函数和存储过程)有效,对已有连接和已有对象不生效。

以上是“MySQL中sql_mode修改不生效怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中sql_mode修改不生效怎么办

本文链接: https://lsjlt.com/news/275907.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中sql_mode修改不生效怎么办
    小编给大家分享一下MySQL中sql_mode修改不生效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景模拟基于业务敏感性的考虑,下面涉及的表、存储过程等...
    99+
    2023-06-14
  • MySQL sql_mode修改不生效的原因及解决
    前言 近期多次聊到sql_mode的话题,也是多次遇到相关问题,今天就趁热打铁,再给大家带来一个sql_mode的案例分享。 场景模拟 基于业务敏感性的考虑,下面涉及的表、存储过程等均非真实数据,但并不影响排查过...
    99+
    2022-05-25
    MySQL sql_mode MySQL sql_mode修改不生效
  • 怎么修改MySQL的SQL_MODE
    这篇文章主要讲解了“怎么修改MySQL的SQL_MODE”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么修改MySQL的SQL_MODE”吧!查看我们当前...
    99+
    2024-04-02
  • 改css不生效怎么办
    本教程操作环境:Windows10系统、CSS3版、DELL G3电脑改css不生效怎么办?CSS样式不起作用?史上最全解决方法汇总在我们写页面时,有时会发现自己写的css样式无法生效,导致这种现象的原因有很多,下面列举一些常见的原因希望可...
    99+
    2023-05-14
    css
  • Linux 7 修改时区不生效怎么办
    这期内容当中小编将会给大家带来有关Linux 7 修改时区不生效怎么办,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查看当前时区[root@tidb01 ~]# dateSat&nbs...
    99+
    2023-06-05
  • 修改域名解析部分地区不生效怎么办
    修改域名解析后出现部分地区不生效的解决方法首先,在计算机中右键点击“网络”,选择“属性”选项;进入到属性页面后,选择本地连接;在弹出的本地连接对话框中,对连接进行修复,并重启计算机;计算机重启后,使用组合键“win+R”运行cmd,打开命令...
    99+
    2024-04-02
  • mysql字符集不生效怎么办
    导致 mysql 字符集设置后不生效的原因可能有多种:客户端和数据库字符集不一致。数据库字符集和表字符集不一致。字符集转换异常。其他因素(例如操作系统设置不正确、collation 未正...
    99+
    2024-08-01
    mysql 数据丢失
  • react中modal不生效怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react中modal不生效怎么办?react中使用ant组件库的modal弹窗报错解决在react项目中使用ant-design库中的modal弹窗控制...
    99+
    2023-05-14
    modal React
  • linux修改完ip不生效怎么解决
    如果在Linux上修改完IP地址后没有生效,可能有几个原因:1. 网络服务没有重启:在修改完IP地址后,需要重启网络服务才能使新的I...
    99+
    2023-10-18
    linux
  • php修改代码不生效怎么解决
    如果你修改了 PHP 代码但没有生效,可能有以下几个原因和解决方法:1. 缓存问题:有时候浏览器或服务器会缓存 PHP 文件,导致修...
    99+
    2023-08-19
    php
  • linux中修改ssh端口号不生效怎么解决
    如果在Linux中修改SSH端口号不生效,可以尝试以下方法解决: 确认配置文件路径:确认修改的配置文件路径是否正确,通常SSH配...
    99+
    2023-10-25
    linux
  • mysql修改最大连接数怎么生效
    要使MySQL修改的最大连接数生效,需要重启MySQL服务。 首先,使用管理员权限登录MySQL服务器。然后,执行以下步骤: 打开...
    99+
    2024-04-09
    mysql
  • linux修改hosts怎么生效
    linux修改hosts生效的方法:1、打开linux终端;2、在linux终端命令行中通过“sudo /etc/init.d/networking restart”命令使修改生效并重启网络服务。具体操作步骤:在linux系统桌面中使用快捷...
    99+
    2024-04-02
  • php extension不生效怎么办
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php extension不生效怎么办?解决php扩展安装不生效问题php安装扩展模块后,重启不生效的原因及解决办法在lnmp运维环境中,我们经常会碰到有些php依赖的扩...
    99+
    2015-08-13
    php extension
  • linux php.ini不生效怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。linux php.ini不生效怎么办?在linux环境下修改php.ini不生效问题排查php.ini修改后不生效主要有如下几种原因:1、修改php.ini配置文件...
    99+
    2024-04-02
  • mac php不生效怎么办
    这篇文章主要介绍了mac php不生效怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mac php不生效的解决办法:1、在“/etc/profile”文件中增加“sud...
    99+
    2023-06-22
  • react+maxlength不生效怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react+maxlength不生效怎么办?问题描述:我有一个 React 输入,但 maxlength 不起作用。有谁知道如何解决这个问题?这是hand...
    99+
    2023-05-14
    maxLength React
  • idea修改java代码不重启怎么生效
    在Java中修改代码而不必重启应用程序,可以使用以下方法: 使用JRebel:JRebel是一个Java开发工具,它可以在修改代...
    99+
    2023-10-27
    idea java
  • vue中更改数组中属性在页面中不生效怎么办
    这篇文章将为大家详细讲解有关vue中更改数组中属性在页面中不生效怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题描述:使用vue的方法获取了数组数据,获取数据后为...
    99+
    2024-04-02
  • php curl exec 不生效怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php curl exec 不生效怎么办?本地php环境不支持curl_exec的解决办法在测试安装某源码时,安装程序检测到本地php环境不支持curl_exec我果...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作