30.4.5.19 sys_get_config() 函数
给定一个配置选项名称,返回该选项的值从sys_config 表中,或者如果选项不存在在表中,则返回提供的默认值(可能是 NULL
)。
如果sys_get_config()返回的默认值是 NULL
,那么期望调用者能够处理该配置选项的 NULL
值。
根据惯例,调用sys_get_config()的函数首先检查对应的用户定义变量是否存在且非 NULL
。如果存在,则函数使用变量值,而不是读取sys_config 表。如果变量不存在或是 NULL
,函数从表中读取选项值并将用户定义变量设置为该值。有关配置选项和对应用户定义变量之间关系的更多信息,请参见30.4.2.1 节,“sys_config 表”。
如果您想检查配置选项是否已经设置,并且如果没有,使用 sys_get_config()
的返回值,可以使用 IFNULL(...)
(见后面的示例)。然而,这在循环中(例如,在结果集中的每一行)中使用 IFNULL(...)
是不被推荐的,因为在重复调用中,使用 IFNULL(...)
可能会比使用 IF (...) THEN ... END IF;
块慢得多(见后面的示例)。
-
in_variable_name VARCHAR(128)
:要返回值的配置选项名称。 -
in_default_value VARCHAR(128)
:如果配置选项不在sys_config 表中,则返回的默认值。
一个 VARCHAR(128)
值。
从sys_config 表中获取配置值,如果选项不存在,则使用 128 作为默认值:
mysql> SELECT sys.sys_get_config('statement_truncate_len', 128) AS Value;
+-------+
| Value |
+-------+
| 64 |
+-------+
单行示例:检查选项是否已经设置;如果没有,分配 IFNULL(...)
结果(使用sys_config 表中的值):
mysql> SET @sys.statement_truncate_len =
IFNULL(@sys.statement_truncate_len,
sys.sys_get_config('statement_truncate_len', 64));
IF (...) THEN ... END IF;
块示例:检查选项是否已经设置;如果不是,则从sys_config
表中分配值:
IF (@sys.statement_truncate_len IS NULL) THEN
SET @sys.statement_truncate_len = sys.sys_get_config('statement_truncate_len', 64);
END IF;