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引擎的解析行为模式。您可以通过在字符串中间添加半角逗号( 目前仅支持设置为 |
示例
修改当前会话时区
修改时区前,执行以下语句,查看当前会话时区。
SELECT @@TIME_ZONE;
返回结果:
+-------------+ | @@TIME_ZONE | +-------------+ | +08:00 | +-------------+
修改当前会话时区为
UTC
时区。SET TIME_ZONE='UTC';
再次执行
SELECT @@TIME_ZONE;
语句,验证是否修改成功。返回结果如下:+-------------+ | @@TIME_ZONE | +-------------+ | UTC | +-------------+
说明会话时区与时间戳类型数据关系的完整示例,请参见如何设置连接时区。
设置SQL引擎的解析行为模式
先直接查询一个字符串常量表达式。
SELECT '{\"key\":\"va\\lu\'e\r\n\"}';
返回结果:
+---------------------+ | EXPR$0 | +---------------------+ | {"key":"va\lu'e "} | +---------------------+
设置SQL引擎的解析行为模式,解析字符串常量时,不使用反斜线(
\
)作为转义符。SET SQL_MODE='NO_BACKSLASH_ESCAPES';
再次执行
SELECT '{\"key\":\"va\\lu\'e\r\n\"}';
语句,验证是否修改成功。返回结果如下:+-----------------------------+ | EXPR$0 | +-----------------------------+ | {\"key\":\"va\\lu\'e\r\n\"} | +-----------------------------+