全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多

set语句

更新时间:2017-06-07 13:26:11

设置字符集

字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。

OceanBase 1.0支持utf8mb4字符集,utf8mb4是utf8的超集,最大编码长度4字节,最大有效位数21比特。与utf8相比,utf8mb4支持ios表情符号等新字符。通常将utf8支持的字符称为BMP(Basic Multilingual Plane),将utf8mb4新增支持的字符称为扩展集。

用户可以在租户级、Database级、表级、字段级、session级设置字符集,因OceanBase 1.0只支持utf8mb4这一种字符集,通常不需要用户去单独设置字符集。

在OceanBase 1.0中,utf8mb4字符集对应的collation支持utf8mb4_bin、utf8mb4_general_ci这二种,默认为utf8mb4_general_ci。主要不同点是对排序和字符串比较有影响,其中utf8mb4_bin大小写敏感、utf8mb4_general_ci大小写不敏感。

  • 修改用户变量

    用户变量用于保存一个用户自定义的值,以便于在以后引用它,这样可以将该值从一个语句传递到另一个语句。用户变量与连接有关,即一个客户端定义的用户变量不能被其它客户端看到或使用,当客户端退出时,该客户端连接的所有变量将自动释放。

    格式

      SET @var_name = expr;
    
    • 用户变量的形式为@var_name,其中变量名var_name可以由当前字符集的文字数字字符、“.”、“_”和“$”组成。

    • 每个变量的expr可以为整数、实数、字符串或者NULL值。

    • 同时定义多个用户变量时,用“,”隔开。

举例

设置用户变量

Oceanbase>SET @a=2, @b=3;
Query OK, 0 rows affected (0.01 sec)

Oceanbase>SET @c = @a + @b;
Query OK, 0 rows affected (0.00 sec)

查看用户变量:

Oceanbase>SELECT @a, @b, @c;
+------+------+------+
| @a   | @b   | @c   |
+------+------+------+
|    2 |    3 |    5 |
+------+------+------+
1 row in set (0.01 sec)

或者通过select语句设置用户变量:

Oceanbase> SELECT @a:=2, @b:=3, @c:=@a+@b;
+-------+-------+-----------+
| @a:=2 | @b:=3 | @c:=@a+@b |
+-------+-------+-----------+
|     2 |     3 |         5 |
+-------+-------+-----------+
1 row in set (0.01 sec)
  • 修改系统变量

    系统变量和SQL功能相关,存放在“__all_sys_variable”表中,如autocommit,tx_isolation等。

OceanBase维护两种变量:

  • 全局变量

    影响OceanBase整体操作。当OceanBase启动时,它将所有全局变量初始化为默认值。修改全局变量,必须具有SUPER权限。

  • 会话变量

    影响当前连接到OceanBase的客户端。在客户端连接OceanBase时,使用相应全局变量的当前值对该客户端的会话变量进行初始化。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。

  • 全局变量的更改不影响目前已经连接的客户端的会话变量,即使客户端执行SET GLOBAL语句也不影响。

格式

设置全局变量的格式:

SET GLOBAL system_var_name = expr;

或者

SET @@GLOBAL.system_var_name = expr;

设置会话变量的格式:

SET [SESSION | @@SESSION. | LOCAL | LOCAL. | @@]system_var_name =expr;

查看系统变量值的格式,如果指定GLOBAL或SESSION修饰符,则分别打印全局或当前会话的系统变量值;如果没有修饰符,则显示当前会话值:

SHOW [GLOBAL | SESSION] 
     VARIABLES 
    [LIKE 'system_var_name' | WHERE expr];

举例

  • 执行以下命令,修改会话变量中的SQL超时时间。
SET @@SESSION.ob_tx_timeout = 900000;
  • 执行以下命令,查看“ob_trx_timeout”的值。
Oceanbase>show variables like 'ob_trx_timeout';
+----------------+-----------+
| Variable_name  | Value     |
+----------------+-----------+
| ob_trx_timeout | 100000000 |
+----------------+-----------+
1 row in set (0.02 sec)

同样可以使用select语句查询变量的值。

Oceanbase>select @@ob_trx_timeout;
+------------------+
| @@ob_trx_timeout |
+------------------+
|        100000000 |
+------------------+
1 row in set (0.00 sec)
本文导读目录