【问题标题】:how to set sql mode variable as a local variable in mysql如何在mysql中将sql模式变量设置为局部变量
【发布时间】:2017-03-12 02:08:22
【问题描述】:

我想要的是,我想将 sql_mode 变量设置为局部变量,而不是会话或全局变量。这样做的原因是我想在执行查询之一后消除 sql 模式变量的更改。下面的会话和全局运行良好,但这不是我想要的。全局 1 永远保持 sql 模式为空。会话一保持 sql 模式为空,直到连接关闭。我想要的是,保持 sql 模式,直到仅执行采石场。

mysql> set global sql_mode='';
mysql> set session sql_mode='';

mysql 查询:-

SELECT tc_exe_grp_num,tcs.tc_tc_id,tcs.tcs_id  
FROM tc_exe_res tcer 
INNER JOIN tcs tcs 
ON tcs.tcs_id = tcer.tcs_tcs_id  
WHERE tcs.tc_tc_id='1' 
AND tcs.tc_tc_id='1' 
GROUP BY tc_exe_grp_num 
ORDER BY tc_exe_grp_num ;

got the idea from this article

请帮帮我。

【问题讨论】:

    标签: mysql variables set


    【解决方案1】:

    @@sql_mode 是会话变量,而不是局部变量。

    可以检索 sql_mode 的当前设置,并将其保存在用户定义的变量中,然后稍后将 sql_mode 设置回原始设置。

    例如:

     -- save current setting of sql_mode in user defined variable
     -- change sql_mode to desired setting
     SET @SAVE_sql_mode = @@sql_mode ;
     SET @@sql_mode = 'NO_ENGINE_SUBSTITUTION' ; 
    
     -- subsequent operations run under new setting of sql_mode
     SELECT '...';
    
    
     -- set sql_mode back to saved setting
     SET @@sql_mode = @SAVE_sql_mode ;  
    

    【讨论】:

      【解决方案2】:

      我找不到直接的答案,但有一个解决方案,

      首先将“sql模式”设置为空,然后在执行采石场后将“sql模式”设置为之前的值,尝试以下方式,

          set session sql_mode='';
      
          SELECT tc_exe_grp_num,tcs.tc_tc_id,tcs.tcs_id FROM tc_exe_res tcer INNER JOIN tcs tcs ON tcs.tcs_id = tcer.tcs_tcs_id WHERE tcs.tc_tc_id='1' AND tcs.tc_tc_id='1' group by tc_exe_grp_num ORDER BY tc_exe_grp_num ;
      
          set session sql_mode='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';
      

      【讨论】:

      • 您可以使用SET @@SESSION.SQL_MODE = @@GLOBAL.SQL_MODE; 将其放回原处。从技术上讲,SET @@SQL_MODE = @@GLOBAL.SQL_MODE; 做了同样的事情,但我喜欢以前的版本,因为它对于下一个阅读代码的可怜的傻瓜来说是明确的,你在做什么。
      • 或者,将当前值存储在用户定义的变量之前,然后将其放回,之后... SET @_SQL_MODE = @@SQL_MODE; before 和 SET @@SQL_MODE = @_SQL_MODE; after 会将当前值临时存储在变量中称为_SQL_MODE(其中单个@ 是用户定义变量的标志,不需要声明)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多