代码之家  ›  专栏  ›  技术社区  ›  Raven Bill Karwin

MySQL:(全局)变量的查询值

  •  0
  • Raven Bill Karwin  · 技术社区  · 4 年前

    我知道可以使用

    SHOW GLOBAL VARIABLES;
    

    SHOW SESSION VARIABLES;
    

    如果我想研究一个特定的变量,我可以使用类似于。

    SHOW GLOBAL VARIABLES LIKE 'log_bin_trust_function_creators';
    

    这导致了这种形式:

    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | OFF   |
    +---------------------------------+-------+
    

    这对于手动检查各自的值来说效果很好,但为了以编程方式查询此类变量的值,这种格式中有两件事困扰着我:

    1. 它返回两列:变量名及其值。然而,我只对这个值感兴趣,因为它是我预先知道的名称(毕竟我在查询中指定了它)
    2. 实际值似乎是实际值的字符串表示形式。当设置这个特定值时,我到目前为止只看到整数 0 1 所以我希望这个设置实际上应该存储为数字类型。然而,在这里它作为字符串返回( OFF ). 虽然很容易将其转换为布尔值,但我不确定这个字符串表示是否取决于区域设置,在这种情况下,到布尔值的转换可能会变得很复杂。

    所以我的问题是:有没有一种方法可以简洁地只查询给定(全局)变量的值,该变量按原样返回其值,而不尝试对其进行打印/字符串化?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Raven Bill Karwin    4 年前

    我找到了答案,多亏了 this answer

    如果您知道给定全局或会话变量的名称,则可以通过以下方式查询其实际值:

    SELECT @@GLOBAL.<variableName>;
    

    SELECT @@SESSION.<variableName>;
    

    分别地

    因此,对于提供的示例,我们可以使用

    SELECT @@GLOBAL.log_bin_trust_function_creators;
    

    得到

    +------------------------------------------+
    | @@GLOBAL.log_bin_trust_function_creators |
    +------------------------------------------+
    |                                        0 |
    +------------------------------------------+