会话变量

Lindorm SQL支持为每个连接会话设置独立的会话变量以控制会话的状态,这些状态变更只会对当前会话生效,不影响其他会话。

引擎与版本

该语法适用于宽表引擎和时序引擎。

重要

要求Lindorm SQL为2.8.4.0以上版本。如何查看Lindorm SQL的版本,请参见SQL版本说明

语法

设置会话变量

set_variable_statement  ::= SET [SESSION] variable_identifier '=' literal

查询会话变量

query_variable_statement ::= SELECT @@variable_identifier

使用说明

变量名(variable_identifier)

变量名称的词法规则与一般标识符相同,标识要设置的变量名称。标识符的说明,请参见标识符

会话配置项(SESSION)

重要
  • SET语句设置的会话配置项优先级高于ALTER SYSTEM设置的系统全局配置项,当两者冲突时,以SET语句设置的会话配置项的值为准。

  • 会话配置项设置后会对SQL引擎的行为产生影响,因此建议您充分理解参数含义后再谨慎修改。

配置项名称

数据类型

适用引擎

说明

TIME_ZONE

重要

仅MySQL协议支持该配置项。MySQL协议连接方式,请参见使用MySQL协议(推荐)

字符串

宽表引擎

设置当前连接会话的时区,默认是东八区。

SQL_MODE

重要

仅Lindorm SQL版本为2.8.4.8及以上版本支持。

字符串

  • 宽表引擎

  • 时序引擎

设置SQL引擎的解析行为模式。您可以通过在字符串中间添加半角逗号(,)来叠加多种模式。

目前仅支持设置为NO_BACKSLASH_ESCAPES,表示解析字符串常量时,不使用反斜线(\)作为转义符。

示例

修改当前会话时区

  1. 修改时区前,执行以下语句,查看当前会话时区。

    SELECT @@TIME_ZONE;

    返回结果:

    +-------------+
    | @@TIME_ZONE |
    +-------------+
    | +08:00      |
    +-------------+
  2. 修改当前会话时区为UTC时区。

    SET TIME_ZONE='UTC';

    再次执行SELECT @@TIME_ZONE;语句,验证是否修改成功。返回结果如下:

    +-------------+
    | @@TIME_ZONE |
    +-------------+
    | UTC         |
    +-------------+
    说明

    会话时区与时间戳类型数据关系的完整示例,请参见如何设置连接时区

设置SQL引擎的解析行为模式

  1. 先直接查询一个字符串常量表达式。

    SELECT '{\"key\":\"va\\lu\'e\r\n\"}';

    返回结果:

    +---------------------+
    | EXPR$0              |
    +---------------------+
    | {"key":"va\lu'e
    "} |
    +---------------------+
  2. 设置SQL引擎的解析行为模式,解析字符串常量时,不使用反斜线(\)作为转义符。

    SET SQL_MODE='NO_BACKSLASH_ESCAPES';

    再次执行SELECT '{\"key\":\"va\\lu\'e\r\n\"}';语句,验证是否修改成功。返回结果如下:

    +-----------------------------+
    | EXPR$0                      |
    +-----------------------------+
    | {\"key\":\"va\\lu\'e\r\n\"} |
    +-----------------------------+